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).

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top