485 votes

iphone, désactivation du clavier lorsque l'on touche à l'extérieur du champ de texte

Je me demande comment faire disparaître le clavier lorsque l'utilisateur touche en dehors de la zone de texte ?

785voto

Jensen2k Points 3992

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)

181voto

drewish Points 2114

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];
}

106voto

Prasad Points 1000

Vérifiez ceci, ce serait la façon la plus simple de le faire,

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

89voto

Joey Tiell Points 765

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.

56voto

Dmitry Sitnikov Points 553

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];
}

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