gpt4 book ai didi

带有 cancelsTouchesInView = false 的 iOS addGestureRecognizer 不适用于 subview 按钮

转载 作者:可可西里 更新时间:2023-11-01 01:58:33 25 4
gpt4 key购买 nike

我以这种方式实现了带有 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 的主视图。键盘被关闭,触摸被转换为 View 的对象 - 按钮等。

但我添加了 subview ,其工作方式类似于具有多个 UITextField 和 UIButton 的 AlertView。这是一个问题。当显示 subview 并且我点击此 subview 的任何按钮时 - gestureRecognizer 使用react并且键盘消失。但没有其他事情发生。所以我必须第二次点击按钮才能按下它。 enter image description here

我尝试将 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 就可以开始正确地处理 subview 按钮,但不能处理主视图。例如,当我尝试关闭搜索栏的键盘时,我开始收到“无法识别的选择器已发送”错误。我已尝试实现单独的函数 addGestureRecognizerForSubView,但仍然出现“无法识别的选择器已发送...”错误。

还尝试添加这个:

extension MenuTableViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view == self.addingItemView
}
}

但没有任何变化。

我在这里检查了很多答案,但找不到我的案例。有人可以建议吗?我可以共享我的 ViewController 类,但是它太重了,而且以编程方式添加的 subview 看起来很丑 :)

最佳答案

在警报后面添加一个 subview 并将手势添加到它而不是 self.view

    let singleTap = UITapGestureRecognizer(target: self.otherView, action: #selector(self.handleTap(_:)))
singleTap.cancelsTouchesInView = false
singleTap.numberOfTapsRequired = 1
self.otherView.addGestureRecognizer(singleTap)

编辑:您建议将其添加到 subview 是正确的

    let singleTap = UITapGestureRecognizer(target: self.addingItemView, action: #selector(self.handleTap(_:)))
singleTap.cancelsTouchesInView = false
singleTap.numberOfTapsRequired = 1
self.view.addGestureRecognizer(singleTap)

但是你还是 Handlebars 势添加到self.view这里

      self.view.addGestureRecognizer(singleTap)

改为

      self.addingItemView.addGestureRecognizer(singleTap)

关于带有 cancelsTouchesInView = false 的 iOS addGestureRecognizer 不适用于 subview 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48721675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com