![](/img/trans.png)
[英]UITextField resign first responder by using pan gesture recognizer for SWRevealViewController
[英]Pan gesture on UISearchBar while first responder
我有一個非常類似於iOS Maps應用程序的場景-一些內容和一個表格視圖,頂部帶有一個搜索欄,您可以將其拉到內容上。 我要的是使用戶能夠在搜索欄上開始平移,而不管它是否處於活動狀態。
只要平移未在搜索欄的文本字段內開始,這項工作就可以單獨進行。 為了克服這個問題,我在搜索欄頂部放置了一個帶有手勢識別器的虛擬UIView
遮罩,類似於this 。 但是,一旦我點擊並因此searchBar成為第一響應者,遮罩就會轉到背景並且不接受觸摸(請注意,我沒有在遮罩isHidden
設置為false
)。 返回平移的唯一方法是searchBarContainerView.bringSubview(toFront: theMask)
。 問題在於,除非searchBar辭職了第一響應者,否則這無效。 我嘗試將UIView子類化為容器,並將layoutSubviews
更改為:
super.layoutSubviews()
if let searchBarMask = self.searchBarMask {
bringSubview(toFront: searchBarMask)
}
但沒有效果。 有什么建議么? 如果有必要,我願意離開UIView-mask模式。
層次結構類似於:
UIView
UIView(在上面的Container View中,在單獨的UIViewController中,將其命名為XController)
搜索欄在XController中添加為:
override func viewDidLoad() {
self.controller = UISearchController(nil)
self.searchPlaceholder.addSubview(self.controller.searchBar)
...
self.mask = UIView(frame: self.controller.searchBar.frame)
self.searchPlaceholder.insertSubview(self.mask, aboveSubview: self.controller.searchBar)
}
我最終做了類似的事情,如下。 我將UIView用作遮罩,但這一次它直接在搜索欄視圖中:
self.searchBar.addSubview(theMask)
self.searchBar.bringSubview(toFront: theMask)
// add pan gesture recogniser on theMask
我沒有任何隱藏/取消隱藏邏輯,並且效果很好。 存在一些問題,例如,您無法在“取消”按鈕上開始平移,而完全不理會在搜索字段上的點擊,但是我認為這與正確配置手勢識別有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.