Zauważysz, że metoda „textFieldShouldReturn” zapewnia obiekt pola tekstowego, który nacisnął klawisz DONE. Jeśli ustawisz TAG, możesz włączyć to pole tekstowe. Lub możesz śledzić i porównywać wskaźnik obiektu z pewną wartością elementu zapisaną przez jego twórcę.
Moje podejście jest takie jak w przypadku samokształcenia:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
bool fDidResign = [textField resignFirstResponder];
NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");
return fDidResign;
}
Tymczasem poddaję test „walidacji”, który zaprzecza następnej rezygnacji. To jest tylko dla ilustracji, więc jeśli użytkownik wpisze NIE! w pole, nie zostanie odrzucone. Zachowanie było takie, jak chciałem, ale sekwencja wyników nie była zgodna z oczekiwaniami.
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
if( [[textField text] isEqualToString:@"NO!"] ) {
NSLog(@"%@", textField.text);
return NO;
} else {
return YES;
}
}
Poniżej znajduje się moje dane wyjściowe NSLog dla tej odmowy, a następnie akceptacja. Zauważysz, że zwracam wynik rezygnacji, ale spodziewałem się, że zwróci FAŁSZ do mnie, aby zgłosić się z powrotem do dzwoniącego ?! Poza tym ma niezbędne zachowanie.
13.313 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]
13.320 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldEndEditing:]
13.327 StudyKbd [109: 207] NIE!
13.333 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: zrezygnował z klawiatury
59.891 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]
59.897 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldEndEditing:]
59.917 StudyKbd [109: 207] - [StudyKbdViewController doneEditText]: NIE
59.928 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: zrezygnował z klawiatury