Кажется, это проблема с символом табуляции (\t
). Этот символ не обрабатывается как обычные символы (например, a, b, c, 0, 1, 2, ...) и, следовательно,
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string;
метод делегата никогда не будет вызван.
Результат использования вкладки, например, внешняя клавиатура или в симуляторе означает, что активное в данный момент текстовое поле отказывается от статуса первого респондента и результата
[textField nextResponder]
станет первым респондентом.
В настоящее время IMO является ошибкой (iOS SDK 4.3) в том, что метод делегата
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
вызывается только один раз (когда вы возвращаете yes), и когда вы повторно выбираете то же текстовое поле и снова используете клавишу табуляции, метод больше не будет вызываться.