189 votes

Comment supprimer le clavier lors de l'édition d'un champ UITextField ?

Je sais que je dois indiquer à mon UITextField de renvoyer le premier intervenant lorsque je veux désactiver le clavier, mais je ne sais pas comment savoir si l'utilisateur a appuyé sur la touche "Done" du clavier. Existe-t-il une notification que je peux surveiller ?

2 votes

[self.view endEditing:YES] ; en touches commence le délégué est la meilleure solution

12voto

Safin Ahmed Points 510

En Swift, vous pouvez écrire une IBAction dans le contrôleur et définir le paramètre S'est terminé à la sortie du champ de texte à cette action

@IBAction func returnPressed(sender: UITextField) {
    self.view.endEditing(true)
}

11voto

Gulsan Borbhuiya Points 141

Swift 4.2 et il fonctionnera à 100 %.

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.textField.delegate = self

    }

    // hide key board when the user touches outside keyboard

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

    // user presses return key

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

}

11voto

user415897 Points 51

Il suffit d'ajouter

[textField endEditing:YES];

à l'endroit où vous souhaitez désactiver le clavier et afficher la vue du sélecteur.

4voto

Metalhead1247 Points 1066

Vous pouvez également utiliser

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
  {

   [self.yourTextField resignFirstResponder];

  }

La meilleure solution si vous avez de nombreux Uitextfields :

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {    
     [self.view endEditing:YES];
 }

2voto

mobibob Points 2657

Vous remarquerez que la méthode "textFieldShouldReturn" fournit l'objet champ de texte qui a appuyé sur la touche DONE. Si vous définissez le TAG, vous pouvez activer ce champ de texte. Vous pouvez également suivre et comparer le pointeur de l'objet avec une valeur membre stockée par son créateur.

Mon approche est la suivante pour un auto-apprentissage :

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    NSLog(@"%s", __FUNCTION__);

    bool fDidResign = [textField resignFirstResponder];

    NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");

    return fDidResign;
}

Entre-temps, j'ai mis en place le test de "validation" qui refuse la démission. Il s'agit uniquement d'une illustration, donc si l'utilisateur tape NON ! dans le champ, il n'y aura pas de démission. Le comportement est conforme à ce que je voulais, mais la séquence de sortie n'est pas celle que j'attendais.

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    NSLog(@"%s", __FUNCTION__);

    if( [[textField text] isEqualToString:@"NO!"] ) {
        NSLog(@"%@", textField.text);
        return NO;
    } else {
        return YES;
    }
}

Voici la sortie de mon NSLog pour ce refus, suivie de l'acceptation. Vous remarquerez que je renvoie le résultat de la résignation, mais je m'attendais à ce qu'il me renvoie FALSE pour que je puisse le rapporter à l'appelant ! A part cela, il a le comportement nécessaire.

13.313 StudyKbd\[109:207\] -\[StudyKbdViewController textFieldShouldReturn:\]
13.320 StudyKbd\[109:207\] -\[StudyKbdViewController textFieldShouldEndEditing:\]
13.327 StudyKbd\[109:207\] NO!
13.333 StudyKbd\[109:207\] -\[StudyKbdViewController textFieldShouldReturn:\]: did resign the keyboard
59.891 StudyKbd\[109:207\] -\[StudyKbdViewController textFieldShouldReturn:\]
59.897 StudyKbd\[109:207\] -\[StudyKbdViewController textFieldShouldEndEditing:\]
59.917 StudyKbd\[109:207\] -\[StudyKbdViewController doneEditText\]: NO
59.928 StudyKbd\[109:207\] -\[StudyKbdViewController textFieldShouldReturn:\]: did resign the keyboard

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X