【问题标题】:Auto dismiss keyboard when change controller Swift更改控制器 Swift 时自动关闭键盘
【发布时间】:2017-10-26 19:56:50
【问题描述】:

在这种情况下,我可以在完成编辑后在任何地方点击时关闭键盘。但是,如果我不到处点击,我的键盘就会卡住并且无法自动隐藏。 示例:当我编辑完一个文本字段后,我没有点击任何地方来关闭键盘,但我点击了下一个按钮,键盘仍然出现在下一页中。 问题:当我瞄准另一个控制器时如何自动关闭键盘。

下面的代码是关闭键盘的正常点击。

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

【问题讨论】:

  • 能不能也加一下hideKeyboardWhenTappedAround方法的代码。当用户触摸文本字段时,您添加了两种隐藏键盘的方法,但我认为我们只需要 self.view.endEditing(true) 就足够了
  • 哦,和以前一样。不同的是我只做这个扩展UIViewController。里面的代码还是一样的我用这个`self.view.endEditing(true)

标签: swift swift3 uikeyboard


【解决方案1】:

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

【讨论】:

  • 与隐藏键盘的方式相同:self.view.endEditing(true)
  • 还是不能,先生。 kebyoard 仍然卡在那里
  • 你知道怎么调试吧?在viewWillDisappear 的那一行上放一个断点,看看它是否被命中。
  • 是的 viewWillDisappear 命中,但键盘没有关闭
  • 好的,viewWillDisappear 命中,案例 1:完成编辑后,我点击视图中的任何位置,键盘消失。案例2:完成编辑后(没有点击视图中的任何地方)我点击按钮访问其他控制器。在这部分我的键盘没有被解雇。两种情况都达到了viewWillDisappear func 。我已经调试并检查过了
【解决方案2】:

如下代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多