swift - 通过点击关闭键盘时丢弃输入

标签 swift uiviewcontroller uitextfield

我在多个 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/

相关文章:

ios - PubNub 如何配置 ios 基本聊天应用程序

ios - 复制 UIViewController 时无法编辑导航栏标题?

ios - SOAP API 正在响应可选括号中的 XML。如何迎合它?

ios - Alamofire NSURLRequest 不明确使用 URLString

ios - 带有自定义转换的 UIViewController;模态呈现后丢失

objective-c - 发送到实例 UIViewController 的无法识别的选择器

iphone - 缩放嵌套在 UIScrollView 深处的 subview

ios - 设置UITextField的最大长度并转换为大写?

ios - 如何从 Swift 中的文本字段获取整数值?

swift - 如何快速格式化固定长度的字符串