web-dev-qa-db-fra.com

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

Comment puis-je détecter lorsqu'un utilisateur a appuyé sur le bouton du clavier "retour" lors de la modification de UITextField? Je dois le faire afin de fermer le clavier lorsque l'utilisateur a appuyé sur le bouton "retour".

Merci.

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

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

enter image description here

207
Ilya Suzdalnitski

La délégation n'est pas obligatoire, 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.

46
mxcl

Swift 3.0

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

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

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

Vous pouvez maintenant le faire en utilisant 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é:

enter image description here

5
Blake Lockley

Version Swift utilisant UITextFieldDelegate:

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