我有一个返回键类型为Done
的UITextField,并且我已设置委托以在点击返回按钮时重新设置第一响应者状态。我还设置了editingChanged
操作,以便在用户编辑文本时通知我。但似乎没有在以下背景下调用它。
假设用户已在文本字段中输入“Pizzs”。 editingChanged
操作被触发,它表示文本字段的值为“Pizzs”。同时,“Pizza”出现在键盘建议栏中作为建议。如果它们到达空格键,则接受自动更正并调用editingChanged
事件,并使用新文本“Pizza”。但如果他们点击Done
然后键盘被解除,则文本在UITextField中更改为“Pizza”,但永远不会调用editingChanged
。
这是一个错误,对吗?我应该向Apple报告吗?或者这是预期的行为,因为文本是以编程方式而不是用户更改的?任何人都可以想到一个好的解决方法吗?
答案 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
}