【发布时间】:2018-07-21 03:49:10
【问题描述】:
我以这种方式实现了带有 UIGestureRecognizer 的 ViewController:
// Extension for GestureRecognizer
extension UIViewController {
func addGestureRecognizer() {
let singleTap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
singleTap.cancelsTouchesInView = false
singleTap.numberOfTapsRequired = 1
self.view.addGestureRecognizer(singleTap)
}
@objc func handleTap(_ recognizer: UITapGestureRecognizer) {
self.view.endEditing(false)
}
}
如您所见,cancelsTouchesInView 默认设置为 false。它适用于带有 searchBar 和 textFields 的主视图。键盘被解除,触摸被转换为视图的对象 - 按钮等等。
但我添加了子视图,它与 AlertView 类似,带有几个 UITextField 和 UIButton。这是一个问题。当出现子视图并且我正在点击此子视图的任何按钮时-gestureRecognizer 会做出反应并且键盘会消失。但没有其他事情发生。所以我必须第二次点击按钮才能按下它。
我尝试将 UITapGestureRecognizer 的目标从 self 更改为 self.mySubViewName,如下所示:
func addGestureRecognizer() {
let singleTap = UITapGestureRecognizer(target: self.addingItemView, action: #selector(self.handleTap(_:)))
singleTap.cancelsTouchesInView = false
singleTap.numberOfTapsRequired = 1
self.view.addGestureRecognizer(singleTap)
}
@objc func handleTap(_ recognizer: UITapGestureRecognizer) {
self.view.endEditing(false)
}
这样,GestureRecognizer 开始正常使用子视图按钮,但无法使用主视图。例如,在尝试关闭搜索栏的键盘时,我开始收到“发送了无法识别的选择器”错误。我尝试实现单独的函数 addGestureRecognizerForSubView,但仍然收到“发送了无法识别的选择器...”错误。
也尝试添加这个:
extension MenuTableViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view == self.addingItemView
}
}
但没有任何变化。
我在这里检查了很多答案,但无法找到我的案例。有人可以建议吗?我可以分享我的 ViewController 类,但是它太重了,而且以编程方式添加的子视图看起来很丑 :)
【问题讨论】:
标签: ios swift uigesturerecognizer