【发布时间】:2021-07-07 01:46:57
【问题描述】:
当用户点击 TextView 之外的屏幕上的任意位置时,我正在使用此代码隐藏键盘:
override func viewDidLoad() {
super.viewDidLoad()
//Looks for single or multiple taps.
let tap = UITapGestureRecognizer(target: self, action: #selector(UIInputViewController.dismissKeyboard))
tap.delegate = self
//Uncomment the line below if you want the tap not not interfere and cancel other interactions.
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
//Calls this function when the tap is recognized.
@objc func dismissKeyboard() {
//Causes the view (or one of its embedded text fields) to resign the first responder status.
view.endEditing(true)
}
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if touch.view is UIButton {
return false
}
return true
}
问题是我在这个视图中也有一个UIButton - 当我点击按钮时,不会调用按钮的手势识别器功能。相反,dismissKeyboard 被调用。我已经尝试过使用 tap.cancelsTouchesInView = false 和shouldReceive 方法的建议,但是它们都不起作用——在shouldReceive 方法中,当我点击按钮时,touch.view 的类是UIView。
有谁知道如何让用户在点击屏幕上的任意位置时隐藏键盘,同时还允许执行按钮操作处理程序?
【问题讨论】:
标签: ios swift uibutton uitextfield uigesturerecognizer