未调用UITextField委托方法(shouldChangeCharactersInRange)

问题描述:

即使我改变了文本字段中的文本,也未调用此UITextField委托方法。 当键盘语言设置为日文/中文输入时,以及是否从建议的单词列表中选择单词时,会发生这种情况。未调用UITextField委托方法(shouldChangeCharactersInRange)

- (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string 

我不确定这是否是iOS中的错误。

有没有人遇到同样的问题?

+0

这听起来像iOS版的一个bug。你使用的是哪个版本的iOS?如果你正在输入英文,这个委托会被调用吗? – xuzhe

+0

我发现这个模拟器很可能是4.3。这个代表在英文时被调用。当你从建议列表中选择单词时,它不会被调用,就像在iPad中一样。 – rae148

我认为这是iOS 4.x中的一个错误,它似乎已经在iOS 5 beta中修复了。

由于关于iOS 5的NDA,我无法详细说明它。希望这个帮助。

+0

感谢您的信息^^,期待iOS5 – rae148

+0

不客气。如果你认为这个答案很有用,那么投票或选择它作为正确的答案将非常感激。 – xuzhe

这可能不是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]; 
}