文本自动更正时,UITextField不调用editingChanged事件

时间:2017-07-19 21:56:26

标签: ios uitextfield

我有一个返回键类型为Done的UITextField,并且我已设置委托以在点击返回按钮时重新设置第一响应者状态。我还设置了editingChanged操作,以便在用户编辑文本时通知我。但似乎没有在以下背景下调用它。

假设用户已在文本字段中输入“Pizzs”。 editingChanged操作被触发,它表示文本字段的值为“Pizzs”。同时,“Pizza”出现在键盘建议栏中作为建议。如果它们到达空格键,则接受自动更正并调用editingChanged事件,并使用新文本“Pizza”。但如果他们点击Done然后键盘被解除,则文本在UITextField中更改为“Pizza”,但永远不会调用editingChanged

这是一个错误,对吗?我应该向Apple报告吗?或者这是预期的行为,因为文本是以编程方式而不是用户更改的?任何人都可以想到一个好的解决方法吗?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你应该使用这个

[textField addTarget:self
          action:@selector(myTextFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];



- (void)myTextFieldDidChange:(id)sender {
// Handle change.
}

答案 2 :(得分:0)

我遇到了同样的问题,并通过实现UITextFieldDelegate方法textFieldShouldReturn(_ textField: UITextField) -> Bool来解决该问题,并在那做与在editChanged事件处理程序中相同的事情。

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

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
}