我在多个 View 中有一些文本字段,如果用户点击键盘外部以关闭它,我希望能够丢弃任何输入(即不对已键入的内容执行任何操作)。
根据一些帖子中的建议,我做了以下操作
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
view.endEditing(true)
}
}
并且我在想要此行为的任何 View Controller 的 viewDidLoad()
方法中调用 self.hideKeyboardWhenTappedAround()
。
发生的情况是,每当键盘关闭时,我在 textFieldDidEndEditing
中的代码就会被执行。我不想这样做,因为如果输入不正确,就会触发错误,但用户忽略键盘作为后退的一种方式,而不是发送输入。
我认为 view.endEditing(true)
只是在每个 subview 上调用了 resignFirstResponder()
,但显然 textFieldDidEndEditing()
也被调用了。
我该如何避免呢?
我一直在浏览很多关于 SO 的帖子,但我可以找到如何解决问题的原因。 我也可能以错误的方式处理这个问题。
最佳答案
我能够理解我的错误。
处理输入的逻辑/代码应该放在 textFieldShouldReturn()
方法中,这是按下键盘返回按钮时调用的方法。
如果用户关闭键盘,则不会调用此方法,因为没有调用返回按钮。
正如@Moshe所说,调用textFieldDidEndEditing
方法是正确的,因为编辑确实结束了。
只需将处理输入的逻辑从这里放到另一个方法中,问题就解决了。
很抱歉提出了菜鸟问题,但我觉得这对所有其他初学者都有帮助。
关于swift - 通过点击关闭键盘时丢弃输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50248929/