我在多个视图中有一些文本字段,并且我希望能够丢弃任何输入(即,如果用户点击键盘外部以解除它,则不要对已键入的内容执行任何操作)。
正如一些帖子所建议我做了以下
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)
}
}
我在任何想要此行为的视图控制器的self.hideKeyboardWhenTappedAround()
方法中调用viewDidLoad()
。
当键盘被解除时,会发生textFieldDidEndEditing
中的代码。我不想这样做,因为如果输入不正确则会触发错误,但是用户将键盘作为退回的方式而不是发送输入。
我认为view.endEditing(true)
在每个子视图上调用了resignFirstResponder()
,但显然也调用了textFieldDidEndEditing()
。
我该如何避免呢?
我一直在寻找关于SO的很多帖子,但我可以找到解决问题的理由。 我也可能以错误的方式接近这个问题。
答案 0 :(得分:0)
我能理解我的错误。
处理输入的逻辑/代码应该采用textFieldShouldReturn()
方法,这是按下键盘返回按钮时调用的方法。
如果用户解除键盘,则不会调用此方法,因为没有调用返回按钮。
正如@Moshe所说,调用textFieldDidEndEditing
方法是正确的,因为编辑确实结束了。
只需将用于处理输入的逻辑放在另一个方法上,问题就解决了。
对于noob问题感到抱歉,但我觉得这对所有其他初学者都有帮助。