Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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
Ios 未识别UITapGestureRecognitor_Ios_Swift_Uitapgesturerecognizer - Fatal编程技术网

Ios 未识别UITapGestureRecognitor

Ios 未识别UITapGestureRecognitor,ios,swift,uitapgesturerecognizer,Ios,Swift,Uitapgesturerecognizer,在我的故事板中,我有一个基本视图,带有一个登录字段。在故事板中,选中了启用用户交互的复选框,我也通过代码进行了设置 下面是我为此使用的代码: class LoginViewController : UIViewController { @IBOutlet weak var emailField: UITextField! @IBOutlet weak var passwordField: UITextField! override func viewDidLoad()

在我的故事板中,我有一个基本视图,带有一个登录字段。在故事板中,选中了
启用用户交互
的复选框,我也通过代码进行了设置

下面是我为此使用的代码:

class LoginViewController : UIViewController {

    @IBOutlet weak var emailField: UITextField!
    @IBOutlet weak var passwordField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad();

        let closeKeyboardGesture = UITapGestureRecognizer(target: self, action: "dismissKeyboard");
        self.view.userInteractionEnabled = true
        self.view.addGestureRecognizer(closeKeyboardGesture);

    }

    private func dismissKeyboard() {
        print("Called")
        if passwordField.selected {
            passwordField.resignFirstResponder()
        }

        if emailField.selected {
            emailField.resignFirstResponder()
        }
    }

}

正如您所看到的,它相当简单,但是从未调用dismissKeyboard函数。困扰我的是,我在我的应用程序的其他地方使用了这些手势,它们工作得很好

这是因为您的
键盘功能标记为
private
。如果从选择器调用方法,并且该方法是私有的,则无法调用它们,因为该方法是从外部调用的

因此,从
dismisskiboard
中删除
private
,它就会工作

更新

如果您更改上述设置,它将起作用,但现在对您不起作用的是
辞职FirstResponder
,您不需要进行If检查,因为您总是想在激活
关闭键盘手势时隐藏键盘,所以只需调用
self.view.endEditing(true)
。我已经为您创建了一个示例项目,其中有一个工作示例。您可以从下载它。

这是因为您的
解除键盘
功能标记为
私有
。如果从选择器调用方法,并且该方法是私有的,则无法调用它们,因为该方法是从外部调用的

因此,从
dismisskiboard
中删除
private
,它就会工作

更新
如果您更改上述设置,它将起作用,但现在对您不起作用的是
辞职FirstResponder
,您不需要进行If检查,因为您总是想在激活
关闭键盘手势时隐藏键盘,所以只需调用
self.view.endEditing(true)
。我已经为您创建了一个示例项目,其中有一个工作示例。你可以从下载

这样就行了


这就可以了。

@爱好者,检查更新。您现在的键盘隐藏有问题。我已经解释了原因,还添加了一个示例项目,向您展示如何解决此问题。@Hobbyist,请查看更新。您现在的键盘隐藏有问题。我已经解释了原因,还添加了一个示例项目来向您展示如何解决这个问题。
func dismissKeyboard() {
    view.endEditing(true)
}