comment ajouter une action sur la clé de retour UITextField?

90

J'ai un bouton et un champ de texte à mon avis. lorsque je clique sur le champ de texte, un clavier apparaît et je peux écrire sur le champ de texte et je peux également ignorer le clavier en cliquant sur le bouton en ajoutant:

[self.inputText resignFirstResponder];

Maintenant, je veux activer la touche de retour du clavier. quand j'appuie sur le clavier, le clavier disparaît et quelque chose se passe. Comment puis-je faire ceci?

razibdeb
la source
1
Double

Réponses:

185

Assurez-vous que "self" s'abonne à UITextFieldDelegateet initialise inputText avec:

self.inputText.delegate = self;

Ajoutez la méthode suivante à "self":

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == self.inputText) {
        [textField resignFirstResponder];
        return NO;
    }
    return YES;
}

Ou dans Swift:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if textField == inputText {
        textField.resignFirstResponder()
        return false
    }
    return true
}
Ander
la source
10

Avec style d'extension dans Swift 3.0

Tout d'abord, configurez un délégué pour votre champ de texte.

override func viewDidLoad() {
    super.viewDidLoad()
    self.inputText.delegate = self
}

Puis conformez-vous à UITextFieldDelegatedans l'extension de votre contrôleur de vue

extension YourViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == inputText {
            textField.resignFirstResponder()
            return false
        }
        return true
    }
}
Fangming
la source
4

Bien que les autres réponses fonctionnent correctement, je préfère faire ce qui suit:

Dans viewDidLoad (), ajoutez

self.textField.addTarget(self, action: #selector(onReturn), for: UIControl.Event.editingDidEndOnExit)

et définir la fonction

@IBAction func onReturn() {
    self.textField.resignFirstResponder()
    // do whatever you want...
}
Mauvais fonctionnement
la source
-1

Utilisez le mécanisme UIKit Target-Action pour l'événement UIE "primaryActionTriggered" envoyé depuis UITextField lorsqu'un bouton clavier terminé est appuyé.

textField.addTarget(self, action: Selector("actionMethodName"), for: .primaryActionTriggered)
Adobels
la source