![](/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.