Метод делегата UITextField не вызывается (shouldChangeCharactersInRange) - PullRequest
0 голосов
/ 18 августа 2011

Этот метод делегата UITextField не вызывается, даже если я изменил текст в текстовом поле.Это произошло, когда в качестве языка клавиатуры был выбран японский / китайский ввод, и если я выбрал слова из предложенного списка слов.

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

Я не уверен, что это ошибка в iOS.

Кто-нибудь сталкивался с такой же проблемой ??

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Я думаю, что это ошибка в iOS 4.x, и она, кажется, была исправлена ​​в бета-версии iOS 5.

Из-за NDA о iOS 5 я не могу больше рассказать об этом. Надеюсь, что это поможет.

0 голосов
/ 28 апреля 2016

Возможно, это не ошибка в iOS 4.x. Даже в iOS 9.x такая ситуация все еще существует.
Для японского / китайского или любого другого языка, который может выбирать слова из предложенного списка слов надклавиатуры, этот метод делегата

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

не будет вызван. Текст поля UIText добавляется выбранным словом напрямую.

Обходной путь должен использовать 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
}  

И не забудьте удалить себя из NSNotificationCenter, когда dealloc:

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