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

How to Dismiss keyboard when touching away across the entire app

我在弹出键盘的不同 viewController 中有多个文本字段。

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

那么当用户点击屏幕上除键盘以外的任何地方时,是否有强制键盘关闭应用程序的任何地方?

我正在考虑扩展 UIViewController,但我在添加为子视图的视图中也有一些文本字段。也许我可以通过某种方式扩展 TextField class 本身?

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

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

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

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

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

你也可以使用视图控制器的扩展,如果你想让键盘关闭应用到所有视图控制器:

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