Comment masquer le clavier lorsque j'appuie sur la touche Retour dans un UITextField?


148

Cliquer dans un champ de texte fait apparaître le clavier. Comment le masquer lorsque l'utilisateur appuie sur la touche retour?


13
La bonne chose à propos de Stack Overflow est que BEAUCOUP de questions ont déjà été répondues, en particulier les plus simples. Par conséquent, veuillez chercher les réponses EN PREMIER avant de demander. Voir, c'est simple: stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

Ceci est une sous-classe de UITextfield qui modifie dynamiquement l'UIReturnKey en fonction de la condition de texte / chaîne: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

Réponses:


286

Commencez par créer votre fichier délégué pour UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Ajoutez ensuite cette méthode à votre code.

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

Ajoutez également self.textField.delegate = self;


1
Curieux, pourquoi <UITextFieldDelegate> n'est-il pas nécessaire? Dans ce cas, vous verrez généralement un avertissement.
pixelfreak

7
si vous rendez votre fichier délégué à l'aide d'Interface Builder, alors <UITextFieldDelegate> n'est pas nécessaire dans le fichier .h ..
Saurabh

1
ajouter <UITextFieldDelegate> dans le fichier .h et définir le délégué dans viewdidload [yourTextField setDelegate: self]; va le compléter!
Umit Kaya

@Saurabh Quelle est la particularité du storyboard créé par VC?
Paul Brewczynski

62

Dans viewDidLoaddéclarer:

[yourTextField setDelegate:self];

Ensuite, incluez le remplacement de la méthode déléguée:

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

6
+1 pour le setDelegate:rappel. J'avais définitivement oublié et le code ne fonctionnait pas auparavant.
piperchester

2
Cela ne devrait-il pas être textField, plutôt que yourTextField lorsqu'il est transmis?
Clive Jefferies

est une façon de dire que déclarez le délégué de votre textField
oscar castellon

1
<UITextFieldDelegate> doit être dans le fichier .h, sinon un avertissement apparaîtra!
Umit Kaya

22

Essayez ceci dans Swift ,

Étape 1: définir le délégué comme vous-même à votretextField

textField.delegate = self

Étape 2: ajoutez ce UITextFieldDelegate sous votre déclaration de classe,

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

En swift, faites comme ceci:
D'abord dans votre ViewControllerimplémentation, UITextFieldDelegate par exemple.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Ajoutez maintenant un délégué à un TextFielddans lequel vous souhaitez ignorer le clavier lorsque le retour est tapé dans la viewDidLoadméthode comme ci-dessous ou à l'endroit où vous l'initialisez. Pour par exemple.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Maintenant, ajoutez cette méthode.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
La deuxième étape n'est pas nécessaire si vous définissez un délégué dans IB.
hris au

Apparaît (dans les versions actuelles de Swift) il devrait y avoir un trait de soulignement avant "textField:"
Bryce Sandlund

2

Essaye ça,

[textField setDelegate: self];

Ensuite, dans la méthode déléguée textField

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

ce n'est pas la meilleure pratique pour le faire.
orafaelreis

nécessite UITextFieldDelegate dans la définition d'interface.
Alp Altunel

@AlpAltunel: Merci pour le commentaire, il y a 4 ans.
Vineesh TP

1

set delegate of UITextField, and over ride, textFieldShouldReturnmethod, dans cette méthode, écrivez simplement les deux lignes suivantes:

[textField resignFirstResponder];
return YES;

c'est tout. Avant d'écrire un code, n'oubliez pas de définir le délégué de a UITextFieldet de définir le type de touche Retour sur "Terminé" dans la fenêtre des propriétés (commande + Maj + I).


1

Vous pouvez connecter "Primary Action Triggered" (clic droit sur UITextField) avec un IBAction et vous pouvez démissionner du premier répondeur (sans délégation). Exemple (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

Méthode préférée si vous utilisez des storyboards.
lal

1

Swift 4

Définissez le délégué du UITextFieldcontrôleur de vue,, field.delegate = selfpuis:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}

Comment géreriez-vous le fait que les utilisateurs souhaitent «tabuler» vers le champ de texte suivant en appuyant sur la touche de retour, jusqu'à ce que le dernier, puis il démissionne? Aussi dans SwiftUI.
Learn2Code

@ Learn2Code crée un gestionnaire, collecte les champs de texte et la chaîne, le dernier déclenchera la fonction de finition.
dimpiax

1

Si vous souhaitez masquer le clavier pour une utilisation particulière du clavier [self.view resignFirstResponder]; Si vous souhaitez masquer un clavier de la vue, utilisez[self.view endEditing:true];



0

Ok, je pense que pour un novice, les choses peuvent être un peu déroutantes. Je pense que la bonne réponse est un mélange de tout ce qui précède, du moins dans Swift4.

Créez une extension ou utilisez le ViewController dans lequel vous souhaitez l'utiliser, mais assurez-vous d'implémenter UITextFieldDelegate. Pour des raisons de réutilisation, j'ai trouvé plus facile d'utiliser une extension:

extension UIViewController : UITextFieldDelegate {
    ...
}

mais l'alternative fonctionne aussi:

class MyViewController: UIViewController {
    ...
}

Ajoutez la méthode textFieldShouldReturn (en fonction de votre option précédente, soit dans l'extension ou dans votre ViewController)

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

Dans votre méthode viewDidLoad, définissez le délégué du champ de texte sur self

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

Cela devrait être tout. Maintenant, lorsque vous appuyez sur returnle textFieldShouldReturndevrait être appelé.


0

Définissez cette classe, puis définissez votre champ de texte pour utiliser la classe et cela automatise tout le clavier de masquage lorsque le retour est appuyé automatiquement.

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

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

}

Ensuite, tout ce que vous avez à faire dans le storyboard est de définir les champs pour utiliser la classe:

entrez la description de l'image ici

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.