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.
![Przypisywanie nextField w IB](https://i.stack.imgur.com/XOfau.png)
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.