Es gibt eine viel elegantere Lösung, die mich beim ersten Mal umgehauen hat. Leistungen:
- Näher an der Implementierung von OSX-Textfeldern, bei der ein Textfeld weiß, wo der Fokus als Nächstes liegen soll
- Verlässt sich nicht auf das Setzen oder Verwenden von Tags - die für diesen Anwendungsfall IMO-fragil sind
- Kann erweitert werden, um mit
UITextField
und zu arbeitenUITextView
Steuerelementen zu arbeiten - oder mit jedem Steuerelement für die Benutzeroberfläche von Tastatureingaben
- Überladen Sie Ihren View Controller nicht mit UITextField-Delegatencode auf der Boilerplate
- Integriert sich gut in IB und kann über die bekannte Option per Drag & Drop konfiguriert werden, um Steckdosen anzuschließen.
Erstellen Sie eine UITextField-Unterklasse mit einer IBOutlet
Eigenschaft namens nextField. Hier ist der Header:
@interface SOTextField : UITextField
@property (weak, nonatomic) IBOutlet UITextField *nextField;
@end
Und hier ist die Implementierung:
@implementation SOTextField
@end
In Ihrem View Controller erstellen Sie die -textFieldShouldReturn:
Delegate-Methode:
- (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;
}
Ändern Sie in IB Ihre UITextFields, um die SOTextField
Klasse zu verwenden. Legen Sie als Nächstes auch in IB den Delegaten für jeden 'SOTextFields'to'-Dateibesitzer' fest (genau dort, wo Sie den Code für die Delegatenmethode eingeben - textFieldShouldReturn). Das Schöne an diesem Design ist, dass Sie jetzt einfach mit der rechten Maustaste auf ein beliebiges Textfeld klicken und dem nächsten SOTextField
Objekt, für das Sie der nächste Antwortende sein möchten , den nextField-Ausgang zuweisen können .
Darüber hinaus können Sie coole Dinge tun, z. B. die textFields schleifen, sodass der erste wieder den Fokus erhält, nachdem der letzte den Fokus verloren hat.
Dies kann leicht erweitert werden , um automatisch das zuweisen returnKeyType
der SOTextField
zu einem , UIReturnKeyNext
wenn es eine Nextfield zugeordnet ist - eine Sache weniger, manuell konfiguriert.