【问题标题】:Tap Gesture Recognizer Interfering with Clear Button点击手势识别器干扰清除按钮
【发布时间】:2017-07-13 04:09:23
【问题描述】:

我有一个启用了清除按钮的 UITextField。我还有一些代码可以在用户点击屏幕上的其他任何位置时关闭键盘:

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)

func dismissKeyboard() {
    view.endEditing(true)
}

问题是这段代码干扰了清除按钮,所以文本字段永远不会被清除。如何防止点击手势识别器处理清除按钮点击?

【问题讨论】:

  • 我原以为手势会跟随 up 视图层次结构,但可能不会。您可以检测按钮层是否被点击(甚至可能是视图,但这里可能存在问题。一旦您知道点击了什么,您就可以正确地指导流程。
  • 如果用户点击它会发生什么?按钮应该优先还是手势优先或两者兼而有之?如果没有触发手动调用 IBAction 并将按钮作为发送者发送
  • 按钮应该优先。而且我在屏幕上还有另一个正常的 UIButton 应该优先但它始终是手势识别器。

标签: ios swift button keyboard uitapgesturerecognizer


【解决方案1】:

想出了防止这种情况发生的方法。

所以清除按钮的类型是UIButton,所以我们不希望手势识别器识别这些点击。

当手势识别器收到点击时调用此函数:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    // Don't handle button taps
    return !(touch.view is UIButton)
}

行:

return !(touch.view is UIButton)

如果用户点击的位置是UIButton,则返回 false,否则返回 true。

所以 false = tap 不会被手势识别器处理,而 true = tap 会被处理。

不要忘记添加UIGestureRecognizerDelegate 并使用以下行进行设置:

tap.delegate = self

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2021-09-27
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多