未调用UITextField委托方法(shouldChangeCharactersInRange)

时间:2011-08-18 02:31:50

标签: ios input keyboard uitextfield

即使我更改了文本字段中的文本,也没有调用此UITextField委托方法。 当键盘语言设置为日语/中文输入并且我从建议的单词列表中选择单词时,会发生这种情况。

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

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

有人遇到同样的问题吗?

2 个答案:

答案 0 :(得分:1)

我认为这是iOS 4.x中的一个错误,似乎已在iOS 5测试版中得到修复。

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

答案 1 :(得分:0)

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

受影响的文本字段存储在通知的object参数中。未使用userInfo字典。

-  (void)checkForTextfield:(NSNotification *)noti{
    UITextField* textField = noti.object;
    //do whatever you want with the UITextfield
}  

当dealloc:

时,不要忘记从NSNotificationCenter中删除self
- (void)dealloc{
   [[NSNotificationCenter defaultCenter] removeObserver:self];
}