点击手势识别器干扰清除按钮

use*_*282 5 keyboard button ios uitapgesturerecognizer swift

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

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

func dismissKeyboard() {
    view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)

问题在于该代码会干扰清除按钮,因此永远不会清除文本字段。如何防止点击手势识别器处理清除按钮的点击?

use*_*282 5

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

因此清除按钮的类型是UIButton,因此我们不希望手势识别器识别那些轻击。

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

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

该行:

return !(touch.view is UIButton)
Run Code Online (Sandbox Code Playgroud)

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

因此,false =轻击将不会被手势识别器处理,而true =轻击将被处理。

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

tap.delegate = self
Run Code Online (Sandbox Code Playgroud)