Ви помітите, що метод "textFieldShouldReturn" надає об'єкт текстового поля, який потрапив на клавішу ДОБРЕ. Якщо встановити TAG, ви можете увімкнути це текстове поле. Або ви можете відстежувати та порівнювати вказівник об’єкта з деяким значенням члена, що зберігається його творцем.
Мій підхід такий для самостійного вивчення:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
bool fDidResign = [textField resignFirstResponder];
NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");
return fDidResign;
}
Тим часом я поставив тест "валідації", який заперечує відставку. Це лише для ілюстрації, тому якщо користувач вводить НІ! на поле, не відпустить. Поведінка була такою, як я хотів, але послідовність виходу була не такою, як я очікував.
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
if( [[textField text] isEqualToString:@"NO!"] ) {
NSLog(@"%@", textField.text);
return NO;
} else {
return YES;
}
}
Далі йде мій вихід NSLog на цю відмову з подальшим прийманням. Ви помітите, що я повертаю результат відставки, але я очікував, що він поверне ФАЛЬСУ до мене, щоб повідомити про те, хто телефонував ?! Крім цього, він має необхідну поведінку.
13.313 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]
13.320 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldEndEditing:]
13.327 StudyKbd [109: 207] НІ!
13.333 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: відмовився від клавіатури
59.891 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]
59.897 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldEndEditing:]
59.917 StudyKbd [109: 207] - [StudyKbdViewController doneEditText]: НІ
59.928 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: відмовився від клавіатури