何禁用DismissKeyboard的点击手势识别器UIButt

何禁用DismissKeyboard的点击手势识别器UIButt

我有这个代码:

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)
}


这是一个全局功能!

当我按下登录按钮时,键盘消失了,然后我必须再次按下它才能登录。有办法避免这种情况吗?

我希望当我按登录按钮键盘时不消失,但当我按外部按钮键盘时消失

最佳答案

您所缺少的是代表。

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 {

关于swift - 如何禁用DismissKeyboard的点击手势识别器UIButton?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57724197/

10-09 02:31