Powiedzmy, że mam następujący kod:
IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;
Chciałbym greetingLabel
przeczytać „Hello [nameTextField]”, gdy tylko użytkownik naciśnie dowolny klawisz.
Zasadniczo potrzebuję odpowiednika metody delegata Cocoa na iPhone'a controlTextDidChange
.
Metoda textField:shouldChangeCharactersInRange:
delegata jest wywoływana za każdym razem, gdy występuje naciśnięcie klawisza:
- (BOOL) textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
Argument łańcuchowy zwraca naciśnięty znak. Jednak rzeczywista textField
wartość ( nameTextField.text
) pozostaje pusta.
Czego tu brakuje? (Chciałbym nameTextField
odzwierciedlić dokładny ciąg wprowadzony przez użytkownika do tej pory).
źródło
[textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]
;).możesz zarejestrować akcję dla zdarzenia UIControlEventEditingChanges w polu tekstowym:
...
źródło
UITextField
ma powiadomienie,UITextFieldTextDidChange
które będzie uruchamiane za każdym razem, gdy zmieni się tekst, jeśli się na to zarejestrujesz. Po prostu zarejestruj się na to powiadomienie iw metodzie wywołanej przez powiadomienie zmień tekst etykiety.Aby dodać do tego, obiekt przekazany do programu obsługi powiadomień będzie miał tekst
UITextField
.Mam nadzieję, że to pomoże.
źródło