更改控制器Swift时自动关闭键盘

时间:2017-05-26 02:51:05

标签: swift swift3 uikeyboard

在这种情况下,我可以在完成编辑后点击任何地方时关闭键盘。但是我的键盘卡住了,如果我没有随处可见,就无法自动隐藏。 示例:当我完成编辑textField时,我没有点击任何地方来关闭键盘,但我点击下一个按钮,键盘仍显示在下一页中。 问题:当我定位到另一个控制器时如何自动关闭键盘。

以下代码是正常点击以解除键盘。

let dismiss: UITapGestureRecognizer =  UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
mainView.addGestureRecognizer(dismiss)
---------------------------
func dismissKeyboard() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
}

其他

这是我获取另一个控制器的代码

//Implement UITextFieldDelegate
extension LoginViewController: UITextFieldDelegate{

    func textFieldDidBeginEditing(_ textField: UITextField) {
        self.hideKeyboardWhenTappedAround()
        let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "EnterMpinViewController") as! EnterMpinViewController
        secondViewController.pinProtocol = self
        textField.resignFirstResponder()
        self.navigationController?.pushViewController(secondViewController, animated: true)
        //        self.performSegue(withIdentifier: "entermPINController", sender: self)
    }
}

所以,如果我点击textField,我会跳到另一个控制器添加引脚。键盘卡在那里。

分机代码:

//Implement viewWillDisappear
extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }

    func dismissKeyboard() {
        self.view.endEditing(true)
    }
}

2 个答案:

答案 0 :(得分:0)

您可以创建BaseViewControler,它是UIViewController的子类。然后重写viewWillDisappear方法,并在那里隐藏键盘。 每个view controller都应该是此BaseViewController的子类。

答案 1 :(得分:0)

写下面代码:

override func viewDidDisappear(_ animated: Bool) {
    self.view.endEditing(true)
}