Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何禁用键盘的点击手势识别器UIButton?_Swift_Xcode - Fatal编程技术网

Swift 如何禁用键盘的点击手势识别器UIButton?

Swift 如何禁用键盘的点击手势识别器UIButton?,swift,xcode,Swift,Xcode,我有以下代码: extension UIViewController { func hideKeyboardWhenTappedAround() { let tap = UITapGestureRecognizer(target: self, action: #selector(self.dissmissKeyboard)) tap.cancelsTouchesInView = false view.addGestureRecognize

我有以下代码:

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 {
在类中,您应该实现如下所示的委托类

let tap = UITapGestureRecognizer(target: self, action: #selector(self.dissmissKeyboard))
tap.delegate = self
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
class ViewController: UIViewController, UIGestureRecognizerDelegate {

你的问题不太清楚。但我想的是,当你第一次按“登录”时,键盘关闭,然后在第二次按“登录”按钮时,你的登录按钮功能被称为“右”。我希望当我按“登录”按钮时,键盘不会消失,“登录”按钮不会消失,但当我按“外部”按钮时,键盘会消失。实际上,若我按下登录按钮键,它就会消失,然后我就可以用这个按钮登录了。我必须按两次按钮进行登录,因为第一次按按钮键盘消失第二次按按钮进行登录返回此“类型为'UIViewController'的值没有成员'dissmissKeyboard'”。请查看更新的答案以及实现
UIgestureRecognitizerDelegate的最后一行代码