Je me demande comment faire disparaître le clavier lorsque l'utilisateur touche en dehors de la zone de texte ?
Réponses
Trop de publicités?Vous devrez ajouter un UITapGestureRecogniser et l'affecter à la vue, puis appeler le premier répondant sur le champ de texte sur son sélecteur.
Le code :
Dans viewDidLoad
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
Dans dismissKeyboard :
-(void)dismissKeyboard {
[aTextField resignFirstResponder];
}
(Où aTextField est le champ de texte qui est responsable du clavier)
J'ai rassemblé 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];
}
Rejeter tout ce qui est en cours d'édition :
- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
[self.view endEditing:YES];
}
Je vois que certaines personnes rencontrent des problèmes en utilisant la méthode UITapGestureRecognizer. Le moyen le plus simple que j'ai trouvé pour réaliser cette fonctionnalité tout en laissant le comportement de mon bouton existant intact est d'ajouter une seule ligne à la réponse de @Jensen2k :
[tap setCancelsTouchesInView:NO];
Cela a permis à mes boutons existants de continuer à fonctionner sans utiliser la méthode de @Dmitry Sitnikov.
Pour en savoir plus sur cette propriété, cliquez ici (recherchez "CancelsTouchesInView") : Référence de classe UIGestureRecognizer
Je ne sais pas comment cela fonctionnerait avec les barres de défilement, comme je vois que certains ont eu des problèmes avec, mais j'espère que quelqu'un d'autre pourrait rencontrer le même scénario que moi.
Il est préférable de faire votre UIView une instance de UIControl (dans le constructeur d'interface) et ensuite connecter leur événement "Touch Up Inside" à dismissKeyboard méthode. Ce site IBAction aura l'air d'une méthode :
- (IBAction)dismissKeyboard:(id)sender {
[aTextBox resignFirstResponder];
}