如何在整个应用程序中触摸时关闭键盘

时间:2016-10-05 17:41:33

标签: ios swift uikeyboard

我在不同的viewControllers中有多个textFields,其中弹出了键盘。

我知道如何在用户点击屏幕的其他部分时关闭键盘,但我不想将其硬编码到应用的每个角落。

当用户点击屏幕上除键盘以外的任何地方的时,有没有强制键盘让键盘在应用程序的任何地方被解雇

我正在考虑扩展UIViewController,但我在视图中也有一些textFields作为子视图添加。也许我可以在某种程度上扩展TextField类本身?

2 个答案:

答案 0 :(得分:4)

我建议创建一个 base UIViewController并让每个ViewControllers继承它;覆盖 touchesBegan 方法:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    view.endEditing(true)
}

或者您可以在基本ViewController中覆盖 viewDidLoad - 并在视图中添加UITapGestureRecognizer,如下所示:

override func viewDidLoad() {
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(Base.endEditing))
    view.addGestureRecognizer(tapGesture)
}

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

答案 1 :(得分:3)

如果您希望键盘解雇适用于所有这些扩展程序,您还可以使用视图控制器的扩展程序:

extension UIViewController {
    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }
}