未调用UITextField委托方法(shouldChangeCharactersInRange)
问题描述:
即使我改变了文本字段中的文本,也未调用此UITextField委托方法。 当键盘语言设置为日文/中文输入时,以及是否从建议的单词列表中选择单词时,会发生这种情况。未调用UITextField委托方法(shouldChangeCharactersInRange)
- (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string
我不确定这是否是iOS中的错误。
有没有人遇到同样的问题?
答
这可能不是iOS 4.x中的一个错误。即使在iOS 9.x中,这种情况依然存在。
对于日本/中国或可以选择从键盘上面的字的建议列表中的单词任何其他语言,此委托方法
- (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string
不会也是UITextField的called.The文本由选用附加词直。
一种解决方法是使用UITextFieldTextDidChangeNotification
:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkForTextfield:)
name:UITextFieldTextDidChangeNotification
object:nil];
受影响的文本字段存储在通知的对象参数。 userInfo字典未使用。
- (void)checkForTextfield:(NSNotification *)noti{
UITextField* textField = noti.object;
//do whatever you want with the UITextfield
}
而且不要忘了当的dealloc从NSNotificationCenter
删除自身:
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
这听起来像iOS版的一个bug。你使用的是哪个版本的iOS?如果你正在输入英文,这个委托会被调用吗? – xuzhe
我发现这个模拟器很可能是4.3。这个代表在英文时被调用。当你从建议列表中选择单词时,它不会被调用,就像在iPad中一样。 – rae148