自动更正文本时,UITextField 未调用 editorChanged 事件
Posted
技术标签:
【中文标题】自动更正文本时,UITextField 未调用 editorChanged 事件【英文标题】:UITextField not calling editingChanged event when text is autocorrected 【发布时间】:2017-07-19 21:56:26 【问题描述】:我有一个返回键类型为Done
的 UITextField,并且我已将委托设置为在点击返回按钮时退出第一响应者状态。我还设置了editingChanged
操作,让我知道用户何时编辑文本。但它似乎没有在以下上下文中被调用。
假设用户在文本字段中输入了“Pizzs”。 editingChanged
动作被触发,它表示文本字段的值为“Pizzs”。同时,“Pizza”作为建议出现在键盘建议栏中。如果他们按空格键,则接受自动更正并调用editingChanged
事件,并带有新文本“Pizza”。但是如果他们点击Done
,那么键盘就会被关闭,UITextField 中的文本会更改为“Pizza”,但永远不会调用editingChanged
。
这是一个错误,对吧?我应该向苹果报告吗?或者这是预期的行为,因为文本正在以编程方式而不是由用户更改?谁能想到一个好的解决方法?
【问题讨论】:
您好,请问您解决了这个问题吗?我有同样的问题:( 没有。我向 Apple 提交了 Radar,但我认为它从未得到解决。 【参考方案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
以上是关于自动更正文本时,UITextField 未调用 editorChanged 事件的主要内容,如果未能解决你的问题,请参考以下文章