UITextField点击键盘邮编建议未触发编辑变更事件,需监听何种控制事件?
解决UITextField键盘建议选择不触发文本变化监听的问题
嘿,这个坑我之前踩过!你用UIControlEventEditingChanged监听文本变化没问题,但键盘的邮编建议(或者自动填充内容)属于系统主动修改文本的场景,并不会触发这个控制事件——因为UIControlEventEditingChanged只对用户手动输入、删除这类直接编辑操作生效。
要覆盖这种场景,有两种靠谱的方案:
方案一:监听UITextFieldTextDidChangeNotification通知
这个通知会在UITextField的文本内容任何时候发生变化时发送,不管是用户手动输入还是系统填充建议。你可以在注册target-action的同时,再添加通知监听:
// 保留原有的target-action监听 [self.zipCode addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; // 添加通知监听,覆盖系统填充场景 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.zipCode];
记得在页面销毁时移除通知,避免内存泄漏:
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:self.zipCode]; }
方案二:同时监听多个控制事件(可选)
除了UIControlEventEditingChanged,你还可以加上UIControlEventValueChanged,不过这个方案的覆盖范围不如通知全面,更推荐用第一种方案:
[self.zipCode addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged | UIControlEventValueChanged];
这样修改后,不管用户是手动输入邮编,还是选择键盘上的邮编建议,textFieldDidChange:方法都会被正常调用啦!
内容的提问来源于stack exchange,提问作者Adam G
相关产品推荐
相关产品推荐

