UITextField - événement de bouton de retour de capture

101

Comment puis-je détecter lorsqu'un utilisateur a appuyé sur le bouton "retour" du clavier lors de l'édition de UITextField? J'ai besoin de le faire afin de supprimer le clavier lorsque l'utilisateur a appuyé sur le bouton «retour».

Merci.

Ilya Suzdalnitski
la source

Réponses:

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

N'oubliez pas de définir le délégué dans le storyboard ...

entrez la description de l'image ici

Ilya Suzdalnitski
la source
47
Assurez-vous que votre contrôleur de vue est défini comme délégué du champ de texte.
zekel
1
Je vous remercie. Pour moi, j'ai mis le délégué via self.yourTextField.delegate = self;. Même plusieurs champs de texte fonctionnent également.
haxpor
@Praxiteles Cela peut maintenant être fait dans le storyboard sans nécessiter de délégation, veuillez vérifier la réponse ci-dessous.
Blake Lockley
51

La délégation n'est pas requise, voici un one-liner:

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

Malheureusement, vous ne pouvez pas le faire directement dans votre Storyboard (vous ne pouvez pas connecter des actions au contrôle qui les émet dans Storyboard), mais vous pouvez le faire via une action intermédiaire.

mxcl
la source
1
Je veux juste souligner que l' UIControlEventEditingDidEndOnExitévénement n'est envoyé que si la textFieldShouldReturn:méthode de délégué retourne OUI (sans démissionner au préalable du champ de texte).
alex-i
Vous ne devez mettre en œuvre la délégation. Mais peut-être que si vous devez revenir YESpour cette méthode.
mxcl
9

SWIFT 3.0

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

dans la fonction enterPressed () mettez tous les comportements que vous recherchez

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

Vous pouvez maintenant le faire dans le storyboard en utilisant l'événement envoyé `` Did End On Exit ''.

Dans votre sous-classe de contrôleur de vue:

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

Dans votre storyboard pour le champ de texte souhaité:

entrez la description de l'image ici

Blake Lockley
la source
C'est la bonne réponse maintenant.
Psiloc
3

Version Swift utilisant UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}
Leo Dabus
la source
2

Swift 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)
Ted
la source
-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

Lorsque vous cliquez sur le bouton Entrée, cette méthode de délégué est appelée. Vous pouvez capturer le bouton de retour de cette méthode de délégué.

Mahendra Vishwakarma
la source