【发布时间】:2017-11-02 16:45:21
【问题描述】:
我有一个与 iOS 地图应用程序非常相似的场景 - 一些内容和一个顶部带有搜索栏的表格视图,您可以将其拉到内容上。我想要的是让用户能够从搜索栏开始平移,无论它是否处于活动状态。
只要平移不在搜索栏的文本字段内开始,就其本身而言,这项工作。为了克服这个问题,我在搜索栏顶部放置了一个带有手势识别器的虚拟UIView 掩码,类似于this。但是,一旦我点击,因此 searchBar 成为第一响应者,掩码进入后台并且不接受触摸(请注意,我没有在掩码上将 isHidden 设置为 false)。返回平移的唯一方法是searchBarContainerView.bringSubview(toFront: theMask)。问题是,除非 searchBar 已经让第一响应者辞职,否则这没有效果。我尝试为容器子类化 UIView 并将 layoutSubviews 更改为:
super.layoutSubviews()
if let searchBarMask = self.searchBarMask {
bringSubview(toFront: searchBarMask)
}
但没有效果。有什么建议么?如有必要,我愿意脱离 UIView-mask 模式。
层次结构类似于:
-
界面视图
- ScrollView(内容)
- ContainerView(上拉的东西)
-
UIView(来自上面的Container View,在一个单独的UIViewController中,命名为XController)
- UIView - 搜索占位符
- UITableView
搜索栏在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)
}
【问题讨论】:
标签: ios swift uigesturerecognizer first-responder