Jest o wiele bardziej eleganckie rozwiązanie, które zaskoczyło mnie, gdy go zobaczyłem po raz pierwszy. Korzyści:
- Bliżej implementacji pola tekstowego OSX, w którym pole tekstowe wie, gdzie należy skupić się dalej
- Nie polega na ustawianiu lub używaniu tagów - które są IMO kruche w tym przypadku użycia
- Może być rozszerzony do pracy zarówno z kontrolkami, jak
UITextField
i UITextView
dowolnym kontrolerem interfejsu użytkownika
- Nie zaśmieca kontrolera widoku kodem delegującym UITextField na płycie wzorcowej
- Ładnie integruje się z IB i można go skonfigurować za pomocą znanej opcji przeciągnij i upuść, aby podłączyć gniazda.
Utwórz podklasę UITextField, która ma IBOutlet
właściwość o nazwie nextField. Oto nagłówek:
@interface SOTextField : UITextField
@property (weak, nonatomic) IBOutlet UITextField *nextField;
@end
A oto wdrożenie:
@implementation SOTextField
@end
W kontrolerze widoku utworzysz -textFieldShouldReturn:
metodę delegowania:
- (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;
}
W IB zmień swoje UITextFields, aby użyć SOTextField
klasy. Następnie, również w IB, ustaw delegata dla każdego z „SOTextFields” do „Właściciela pliku” (co jest dokładnie tam, gdzie umieścisz kod dla metody delegowania - textFieldShouldReturn). Piękno tego projektu polega na tym, że teraz możesz po prostu kliknąć prawym przyciskiem myszy dowolny textField i przypisać ujście nextField do następnego SOTextField
obiektu, który chcesz być kolejnym responderem.
Co więcej, możesz robić fajne rzeczy, takie jak zapętlanie pól tekstowych, aby po tym, jak ostatni straci fokus, pierwszy otrzyma fokus ponownie.
To można łatwo rozszerzyć, aby automatycznie przypisać returnKeyType
z SOTextField
Do UIReturnKeyNext
jeśli istnieje nextField przypisane - jeden mniej rzeczy ręcznie Konfiguruj.