Question iOS - Quitter le clavier lorsque vous touchez en dehors de UITextField


Je me demande comment faire disparaître le clavier lorsque l'utilisateur touche en dehors d'un UITextField.


411
2018-03-15 00:31


origine


Réponses:


Vous devrez ajouter un UITapGestureRecogniser et l'affecter à la vue, puis appeler le premier répondeur sur le UITextField sur son sélecteur.

Le code:

Dans viewDidLoad

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

En renvoiKeyboard:

-(void)dismissKeyboard 
{
    [aTextField resignFirstResponder];
}

(Où aTextField est le champ de texte qui est responsable du clavier)

Swift 3 la version ressemble à ça

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard (_:)))
self.view.addGestureRecognizer(tapGesture)

Pour rejeterClavier

func dismissKeyboard (_ sender: UITapGestureRecognizer) {
    aTextField.resignFirstResponder()
}

712
2018-03-15 00:36



J'ai écrasé quelques réponses.

Utilisez un ivar qui est initialisé pendant viewDidLoad:

UIGestureRecognizer *tapper;

- (void)viewDidLoad
{
    [super viewDidLoad];
    tapper = [[UITapGestureRecognizer alloc]
                initWithTarget:self action:@selector(handleSingleTap:)];
    tapper.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapper];
}

Ignorer ce qui est en cours d'édition:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}

165
2018-06-20 10:52



Vérifiez ceci, ce serait le moyen le plus simple de le faire,

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      [self.view endEditing:YES];// this will do the trick
}

Ou

Cette librairie gère notamment le défilement automatique de la barre de défilement, l'espace pour cacher le clavier, etc ...

https://github.com/michaeltyson/TPKeyboardAvoiding


99
2018-02-03 17:21



Je vois que certaines personnes ont des problèmes avec le UITapGestureRecognizer méthode. Le moyen le plus simple d’accomplir cette fonctionnalité tout en conservant le comportement de touche de mon bouton existant est d’ajouter une seule ligne à la réponse de @Jensen2k:

[tap setCancelsTouchesInView:NO];

Cela a permis à mes boutons existants de fonctionner sans utiliser la méthode de @Dmitry Sitnikov.

Lisez à ce sujet property ici (chercher CancelsTouchesInView): Référence de la classe UIGestureRecognizer

Je ne suis pas sûr de la façon dont cela fonctionnerait avec les barres de défilement, comme je le voyais avec certains problèmes, mais j'espère que quelqu'un d'autre pourrait rencontrer le même scénario que moi.


82
2017-08-04 08:43



Il vaut mieux faire votre UIView une instance de UIControl (dans le générateur d'interface), puis connectez leur TouchUpInside événement à dismissKeyboard méthode. Ce IBAction La méthode ressemblera à:

- (IBAction)dismissKeyboard:(id)sender {
    [aTextBox resignFirstResponder];
}

54
2018-01-06 15:05



Version rapide, cela fonctionne en combinaison avec d'autres éléments (comme un UIButton ou un autre UITextField):

override func viewDidLoad() {
    super.viewDidLoad()

    let tapper = UITapGestureRecognizer(target: self, action:#selector(endEditing))
    tapper.cancelsTouchesInView = false
    view.addGestureRecognizer(tapper)
}

25
2017-10-04 05:42



Que diriez-vous de ceci: je sais que c'est un vieux message. Cela pourrait aider quelqu'un :)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    NSArray *subviews = [self.view subviews];
    for (id objects in subviews) {
        if ([objects isKindOfClass:[UITextField class]]) {
            UITextField *theTextField = objects;
            if ([objects isFirstResponder]) {
                [theTextField resignFirstResponder];
            }
        } 
    }
}

15
2017-10-10 10:16