Uzyskiwanie wartości pola UITextField podczas wprowadzania naciśnięć klawiszy?
Załóżmy, że mam następujący kod:
IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;
Chciałbym, aby greetingLabel
przeczytało " Hello [nameTextField]", gdy tylko użytkownik naciśnie dowolny klawisz.
To, czego potrzebuję, to w zasadzie iPhone odpowiednik metody Cocoa delegate controlTextDidChange
.
Metoda delegata jest wywoływana za każdym razem, gdy wystąpi naciśnięcie klawisza:
- (BOOL) textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
Argument string zwraca wciśnięty znak. Rzeczywista wartość textField
(nameTextField.text
) pozostaje jednak pusta.
Co mi tu umyka? (I ' d jak nameTextField
, aby odzwierciedlić dokładny ciąg znaków, który użytkownik wprowadził do tej pory).
3 answers
Okazuje się, że najprostszym sposobem na to jest użycie Interface Builder:
- Dodaj IBAction (do Viewcontrollera, powiedzmy, jak w tym przypadku)
- Ctrl-kliknij (lub kliknij prawym przyciskiem myszy) na polu UITextField w Interface Builder
- Połącz Zdarzenie" Editing Changed " z akcją właściciela pliku dodaną w pierwszym kroku.
Działa jak czar :) (nie mogę uwierzyć, że spędziłem nad tym wiele dni i uświadomiłem sobie teraz, że rozwiązanie było o wiele prostsze niż myślałem : P)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-23 10:26:52
Możesz zarejestrować akcję dla zdarzenia uicontroleventeditingchanges w polu tekstowym:
[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];
...
// TODO: error checking
- (void)updateLabelUsingContentsOfTextField:(id)sender {
greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];
}
UITextField
posiada powiadomienie UITextFieldTextDidChange
, które będzie wywoływane za każdym razem, gdy zmieni się tekst, jeśli się do niego zarejestrujesz. Wystarczy zarejestrować się do tego powiadomienia i w metodzie wywołanej przez powiadomienie zmienić tekst etykiety.
Aby dodać do tego, obiekt przekazany do obsługi powiadomień będzie miał tekst UITextField
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-22 19:18:03