我有此代码:
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap = UITapGestureRecognizer(target: self, action: #selector(self.dissmissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
view.endEditing(true)
}
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
// Don't handle button taps
return !(touch.view is UIButton)
}
这是一个全局函数!
当我按下登录按钮时,键盘消失了,然后必须再次按下它才能登录。有办法避免这种情况吗?
我希望当我按下登录按钮时键盘不会消失,而当我按下外部按钮时键盘消失
答案 0 :(得分:0)
您所缺少的是代表。
tap.delegate = self
由于尚未添加代理,因此您的
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
该方法将不会执行。
在那里有一个断点,看看它是否执行。我不这么认为。通过添加我前面提到的委托将达到目的。
代码如下所示。
let tap = UITapGestureRecognizer(target: self, action: #selector(self.dissmissKeyboard))
tap.delegate = self
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
在该类中,您应该实现如下所示的委托类。
class ViewController: UIViewController, UIGestureRecognizerDelegate {