触摸整个应用程序时如何关闭键盘
Posted
技术标签:
【中文标题】触摸整个应用程序时如何关闭键盘【英文标题】:How to Dismiss keyboard when touching away across the entire app 【发布时间】:2016-10-05 17:41:32 【问题描述】:我在弹出键盘的不同视图控制器中有多个文本字段。
我知道当用户点击屏幕的不同部分时如何关闭键盘,但我不想将它硬编码到我应用的每个角落。
那么当用户点击键盘以外的屏幕上的任何位置时,是否有强制键盘在应用程序的任何地方被关闭?
我正在考虑扩展 UIViewController,但我在视图中也有一些文本字段,我将其添加为子视图。也许我可以扩展 TextField 类本身?
【问题讨论】:
【参考方案1】:我建议创建一个 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)
【讨论】:
这也可以通过零成本的 Swift 扩展来完成。你不必重构你所有的UIViewController
想象一下,我有一个带有按钮的 viewController。然后我点击那个显然是 viewController 的子视图的按钮。然后 viewController 将不再收到消息,因此键盘仍然存在。我说的对吗?
点击按钮不会调用 touchesBegan,您可以通过在按钮的操作中添加“view.endEditing(true)”来解决此问题... @IBAction func buttonTapped(sender: AnyObject) view. endEditing(true) 【参考方案2】:
如果您希望键盘解除应用于所有视图控制器,您还可以使用视图控制器的扩展:
extension UIViewController
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
self.view.endEditing(true)
【讨论】:
以上是关于触摸整个应用程序时如何关闭键盘的主要内容,如果未能解决你的问题,请参考以下文章