Ios 未调用UITextField委托方法(shouldChangeCharactersInRange)

Ios 未调用UITextField委托方法(shouldChangeCharactersInRange),ios,input,keyboard,uitextfield,Ios,Input,Keyboard,Uitextfield,即使我更改了textfield中的文本,也没有调用此UITextField委托方法。 当键盘语言设置为日语/汉语输入时,如果我从建议的单词列表中选择单词,就会出现这种情况 - (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string 我不确定这是否是iOS中的错误 有人遇到过同样的问题吗?

即使我更改了textfield中的文本,也没有调用此UITextField委托方法。 当键盘语言设置为日语/汉语输入时,如果我从建议的单词列表中选择单词,就会出现这种情况

- (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string
我不确定这是否是iOS中的错误


有人遇到过同样的问题吗???

我确实认为这是iOS 4.x中的一个bug,而且它似乎已经在iOS 5测试版中修复


由于有关iOS 5的保密协议,我不能透露更多。希望有帮助。

这可能不是iOS 4.x中的错误。即使在iOS 9.x中,这种情况仍然存在。
对于日语/汉语或任何其他可以从键盘上方建议的单词列表中选择单词的语言,此委托方法

- (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string
不会调用。UITextfield的文本直接由所选单词追加

解决方法是使用
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
}  
当解除锁定时,不要忘记将self从
NSNotificationCenter
中删除:

- (void)dealloc{
   [[NSNotificationCenter defaultCenter] removeObserver:self];
}

这听起来像是iOS的一个bug。您使用的是什么版本的iOS?如果你在输入英语,这个委托会被调用吗?我在模拟器中发现了这个问题,很可能是4.3。此委托为英语时被调用。当你从建议列表中选择单词时,它不会被调用,就像在iPad中一样。欢迎你。如果你认为这个答案很有用,请投票支持或选择它作为正确答案,我们将不胜感激。