Ottenere il valore di un UITextField come sono inseriti i tasti?
-
23-08-2019 - |
Domanda
Diciamo che ho il seguente codice:
IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;
Mi piacerebbe il greetingLabel
per leggere "Ciao [nameTextField]" non appena l'utente preme un tasto.
Che cosa ho bisogno in sostanza è l'iPhone equivalente del cacao metodo delegato controlTextDidChange
.
Il metodo textField:shouldChangeCharactersInRange:
delegato è chiamato ogni volta che si verifica una combinazione di tasti:
- (BOOL) textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
L'argomento stringa restituisce il carattere che viene premuto. Il valore del textField
reale (nameTextField.text
) rimane vuoto però.
Che cosa mi manca qui? (Mi piacerebbe nameTextField
in modo da riflettere la stringa esatta che l'utente ha inserito finora).
Soluzione
Si scopre, il modo più semplice per farlo è usare Interface Builder:
- Aggiungi un IBAction (al ViewController, per esempio, come in questo caso)
- Ctrl-clic (o clic destro) sulla UITextField in Interface Builder
- Collegare il "Editing Changed" evento per IBAction del proprietario del file aggiunto nella prima fase.
funziona come un fascino :) (non riesco a credere che ho trascorso molti giorni in questo, e per rendersi conto ora che la soluzione era molto più semplice di quanto pensassi: P)
Altri suggerimenti
è possibile registrare un'azione per i UIControlEventEditingChanges eventi nel campo di testo:
[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];
...
// TODO: error checking
- (void)updateLabelUsingContentsOfTextField:(id)sender {
greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];
}
UITextField
ha un UITextFieldTextDidChange
di notifica che verrà licenziato ogni volta che il testo cambia se si registra per esso. Basta registrarsi per la notifica e nel metodo chiamato dal notifica, modificare il testo dell'etichetta.
Per aggiungere a questo, l'oggetto passato al gestore di notifica avrà il testo del UITextField
.
La speranza che aiuta.