UITextField 在被代码更改时触发 UITextFieldTextDidChangeNotification?

Posted

技术标签:

【中文标题】UITextField 在被代码更改时触发 UITextFieldTextDidChangeNotification?【英文标题】:UITextField fires UITextFieldTextDidChangeNotification when changed by code? 【发布时间】:2012-10-20 03:32:11 【问题描述】:

我正在尝试添加一个UIViewController 作为UITextFieldTextDidChangeNotification 通知的观察者。当我通过在文本字段中键入来更改文本时,一切都很顺利。但是,如果我尝试通过调用 [_textfield setText:@"Blahblah"] 来更改文本,通知似乎不会被触发。

这是预期的方式吗?

谢谢!

【问题讨论】:

【参考方案1】:

大多数事件通常都是这样。当事件由用户驱动时,您需要通知。但是,当事件由显式代码更改驱动时,您不希望收到通知。由于您正在进行显式调用以进行更改,因此您还可以选择调用通知处理程序。这是一种更灵活的方法。

下面是一个示例,说明为什么您不希望在您自己的代码触发事件时发送通知。想象一下,当您的代码收到通知时,您验证文本并根据验证更新文本字段。这可能会导致通知/更改的无限循环。

【讨论】:

非常感谢!我只是确保不是其他东西坏了。谢谢~ 不幸的是,Apple 并不是 100% 与这类东西保持一致。虽然我想不出一个具体的例子,但我知道有一些情况,至少在典型的委托方法模型中,即使使用显式方法调用而不只是使用用户或系统驱动的事件。

以上是关于UITextField 在被代码更改时触发 UITextFieldTextDidChangeNotification?的主要内容,如果未能解决你的问题,请参考以下文章

更新字段时,UITextField“值已更改”未触发

UITextField 更改事件不会针对语音或粘贴输入触发

UITextField在UIDatePicker操作事件时不触发操作事件

更改 UITextField 的文本不会触发 rx.text 活页夹

触发 UITextField 时同步向上滑动 UIView 并调整 UITableView 的大小

防止 UITextField 在更改 firstResponder 时取值