Vous remarquerez que la méthode "textFieldShouldReturn" fournit l'objet de champ de texte qui a appuyé sur la touche DONE. Si vous définissez le TAG, vous pouvez activer ce champ de texte. Ou vous pouvez suivre et comparer le pointeur de l'objet avec une valeur de membre stockée par son créateur.
Ma démarche est la suivante pour une auto-apprentissage:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
bool fDidResign = [textField resignFirstResponder];
NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");
return fDidResign;
}
En attendant, je mets le test de «validation» qui nie la démission qui suit. Ce n'est qu'à titre d'illustration, donc si l'utilisateur tape NON! sur le terrain, il ne rejettera pas. Le comportement était comme je le voulais, mais la séquence de sortie n'était pas comme je m'y attendais.
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
if( [[textField text] isEqualToString:@"NO!"] ) {
NSLog(@"%@", textField.text);
return NO;
} else {
return YES;
}
}
Voici ma sortie NSLog pour ce refus suivi de l'acceptation. Vous remarquerez que je retourne le résultat de la démission, mais je m'attendais à ce qu'il me retourne FALSE pour faire rapport à l'appelant?! En dehors de cela, il a le comportement nécessaire.
13.313 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]
13.320 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldEndEditing:]
13.327 StudyKbd [109: 207] NON!
13.333 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: a démissionné du clavier
59.891 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]
59.897 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldEndEditing:]
59.917 StudyKbd [109: 207] - [StudyKbdViewController doneEditText]: NON
59.928 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: a démissionné du clavier