在整个应用程序中触摸时如何关闭键盘
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)
}
}
我在弹出键盘的不同 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)
}
}