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.

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


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.


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()
}

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


C'est la bonne réponse maintenant.
Psiloc

3

Version Swift utilisant 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;
}

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.