Il existe un beaucoup plus élégante qui m'a époustouflé la première fois que je l'ai vue. Avantages :
- Plus proche de l'implémentation des champs de texte OSX où un champ de texte sait où le focus doit aller ensuite
- Ne repose pas sur la définition ou l'utilisation de balises - qui sont, IMO, fragiles pour ce cas d'utilisation.
- Peut être étendu pour fonctionner avec les deux
UITextField
y UITextView
ou tout contrôle d'interface utilisateur avec saisie au clavier
- N'encombre pas votre contrôleur de vue avec du code délégué UITextField de type chaudière
- Il s'intègre parfaitement à l'IB et peut être configuré à l'aide de l'option familière "glisser-déposer" pour connecter les prises.
Créer une sous-classe d'UITextField qui possède une fonction IBOutlet
appelée nextField. Voici l'en-tête :
@interface SOTextField : UITextField
@property (weak, nonatomic) IBOutlet UITextField *nextField;
@end
Et voici la mise en œuvre :
@implementation SOTextField
@end
Dans votre contrôleur de vue, vous créerez le fichier -textFieldShouldReturn:
méthode de délégation :
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if ([textField isKindOfClass:[SOTextField class]]) {
UITextField *nextField = [(SOTextField *)textField nextField];
if (nextField) {
dispatch_async(dispatch_get_current_queue(), ^{
[nextField becomeFirstResponder];
});
}
else {
[textField resignFirstResponder];
}
}
return YES;
}
Dans l'IB, modifiez vos UITextFields pour utiliser l'élément SOTextField
classe. Ensuite, toujours dans IB, définissez le délégué de chacun des "SOTextFields" à "File's Owner" (c'est-à-dire à l'endroit où vous avez placé le code de la méthode de délégué - textFieldShouldReturn). La beauté de cette conception réside dans le fait que vous pouvez maintenant simplement cliquer avec le bouton droit de la souris sur n'importe quel champ de texte et assigner la sortie nextField au champ de texte suivant. SOTextField
vous voulez être le prochain à répondre.
En outre, vous pouvez faire des choses intéressantes, comme mettre en boucle les champs de texte de sorte qu'après que le dernier ait perdu le focus, le premier recevra à nouveau le focus.
Il est facile d'étendre ce principe pour attribuer automatiquement le returnKeyType
de la SOTextField
à un UIReturnKeyNext
s'il y a un nextField assigné -- une chose de moins à configurer manuellement.
0 votes
Jetez un coup d'œil à ma réponse ci-dessous. D'après mon expérience, il s'agit d'une solution meilleure et plus complète que la réponse généralement donnée. Je n'ai aucune idée de la raison pour laquelle quelqu'un lui donnerait une note négative.
0 votes
J'ai le même problème mais avec Cordova, Phonegap. Y a-t-il un moyen de le résoudre ?