用水龙头解除键盘时丢弃输入

时间:2018-05-09 08:36:32

标签: swift uiviewcontroller uitextfield

我在多个视图中有一些文本字段,并且我希望能够丢弃任何输入(即,如果用户点击键盘外部以解除它,则不要对已键入的内容执行任何操作)。

正如一些帖子所建议我做了以下

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的很多帖子,但我可以找到解决问题的理由。 我也可能以错误的方式接近这个问题。

1 个答案:

答案 0 :(得分:0)

我能理解我的错误。

处理输入的逻辑/代码应该采用textFieldShouldReturn()方法,这是按下键盘返回按钮时调用的方法。 如果用户解除键盘,则不会调用此方法,因为没有调用返回按钮。

正如@Moshe所说,调用textFieldDidEndEditing方法是正确的,因为编辑确实结束了。

只需将用于处理输入的逻辑放在另一个方法上,问题就解决了。

对于noob问题感到抱歉,但我觉得这对所有其他初学者都有帮助。