【问题标题】:UITextField not calling editingChanged event when text is autocorrected自动更正文本时,UITextField 未调用 editorChanged 事件
【发布时间】:2017-07-19 21:56:26
【问题描述】:

我有一个返回键类型为Done 的 UITextField,并且我已将委托设置为在点击返回按钮时退出第一响应者状态。我还设置了editingChanged 操作,让我知道用户何时编辑文本。但它似乎没有在以下上下文中被调用。

假设用户在文本字段中输入了“Pizzs”。 editingChanged 动作被触发,它表示文本字段的值为“Pizzs”。同时,“Pizza”作为建议出现在键盘建议栏中。如果他们按空格键,则接受自动更正并调用editingChanged 事件,并带有新文本“Pizza”。但是如果他们点击Done,那么键盘就会被关闭,UITextField 中的文本会更改为“Pizza”,但永远不会调用editingChanged

这是一个错误,对吧?我应该向苹果报告吗?或者这是预期的行为,因为文本正在以编程方式而不是由用户更改?谁能想到一个好的解决方法?

【问题讨论】:

  • 您好,请问您解决了这个问题吗?我有同样的问题:(
  • 没有。我向 Apple 提交了 Radar,但我认为它从未得到解决。

标签: ios uitextfield


【解决方案1】:

在这种情况下,您应该使用.allEditingEvents

textField.addTarget(self, action: #selector(didChangeText(_:)), for: .allEditingEvents)

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并通过实现 UITextFieldDelegate 方法 textFieldShouldReturn(_ textField: UITextField) -> Bool 来解决它,并在那里执行我在 editorChanged 事件处理程序中执行的相同操作。

    所以,我基本上是这样做的:

    textField.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        processText()
        return false
    }
    
    @objc func textFieldEditingChanged(_ textField: UITextField) {
        processText()
    }
    
    func processText() {
        // Process text here
    }
    

    【讨论】:

    • 这仅适用于用户点击返回以完成自动更正的情况。但是点击屏幕(不取消自动更正弹出窗口)也会触发自动更正替换但不会调用textFieldShouldReturn
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多