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

标签 ios swift button keyboard uitapgesturerecognizer

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

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

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

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

最佳答案

找到一种方法来防止这种情况发生。

所以清除按钮的类型是 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

关于ios - 点击手势识别器干扰清除按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402854/

相关文章:

javascript - 使用 <span> 彩虹滚动文本

c# - 如何让计时器运行 10 分钟然后禁用按钮?

ios - 如果找不到本地化字符串,则返回一个字符串

ios - 关闭弹出 View

ios - 适用于 Android 的 Firebase 推送通知,但仅适用于 iOS 的 Firebase 控制台

ios - 快速找出单击按钮的父 View

ios - 使用 Swift (LinkedIn API) 将 JSON 响应解析为数据模型

ios - 使用小写字母和数组过滤搜索文本的内容

ios - 在不同的 Storyboard、Swift、iOS、Xcode 上通过 segue 和 Navigation 将数据从一个 Controller 传递到另一个 Controller

iPhone,圆形矩形按钮上半部分和下半部分?