UITextField: cattura l'evento del pulsante di ritorno


101

Come posso rilevare quando un utente ha premuto il pulsante della tastiera "Invio" durante la modifica di UITextField? Devo farlo per chiudere la tastiera quando l'utente preme il pulsante "Invio".

Grazie.

Risposte:


212
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}

Non dimenticare di impostare il delegato nello storyboard ...

inserisci qui la descrizione dell'immagine


47
Assicurati che il controller della vista sia impostato come delegato del campo di testo.
zekel

1
Grazie. Per me ho impostato il delegato tramite self.yourTextField.delegate = self;. Anche più campi di testo funzionano.
haxpor

@Praxiteles Questo ora può essere fatto nello storyboard senza richiedere delega, controlla la risposta di seguito.
Blake Lockley,

51

La delega non è richiesta, ecco una battuta:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

Purtroppo non puoi farlo direttamente nel tuo Storyboard (non puoi collegare le azioni al controllo che le emette in Storyboard), ma potresti farlo tramite un'azione intermedia.


1
Voglio solo sottolineare che l' UIControlEventEditingDidEndOnExitevento viene inviato solo se il textFieldShouldReturn:metodo delegato restituisce SÌ (senza rinunciare preventivamente al campo di testo).
alex-i

Non è necessario implementare la delega. Ma forse se devi tornare YESper questo metodo.
mxcl

9

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

nella funzione enterPressed () inserisci tutti i comportamenti che stai cercando

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}

8

Ora puoi farlo nello storyboard usando l'evento inviato "Fine all'uscita".

Nella sottoclasse del controller di visualizzazione:

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

Nel tuo storyboard per il campo di testo desiderato:

inserisci qui la descrizione dell'immagine


Questa è la risposta corretta ora.
Psiloc

3

Versione Swift utilizzando UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}

2

Swift 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)

-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

Quando si fa clic sul pulsante Invio, viene chiamato questo metodo delegato. È possibile acquisire il pulsante di ritorno da questo metodo delegato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.