web-dev-qa-db-fra.com

comment masquer le clavier lorsque la zone vide est touchée sur l'iphone

normalement lorsque vous touchez la zone de saisie de texte, le clavier apparaît et lorsque vous touchez la zone vide de l'écran, le clavier a disparu. Comment y arriver?

tout comme ce que nous avons vécu sur iphone safari ...

Merci

71
Neo Wu

Manière mise à jour (recommandée):

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

Cela mettra fin à la modification de toutes les sous-vues et démissionnera du premier répondant.

Autre moyen (énumération sur toutes les vues de texte):

Voici une étape par étape:

Ajoutez une IBAction à votre contrôleur de vue, telle que - (IBAction) backgroundTouch: (id) sender

Dans l'action backgroundTouch, vous devez envoyer le message resignFirstResponder à toutes les zones de texte de votre vue. C'est malheureux mais nécessaire car il n'y a actuellement aucun moyen de récupérer l'objet qui a actuellement le statut FirstResponder. Ça devrait ressembler a quelque chose comme ca:

- (IBAction)backgroundTouch:(id)sender {
  [someTextBox resignFirstResponder];
  [anotherTextBox resignFirstResponder];
}

Ajoutez un contrôle de bouton à la vue, redimensionnez-le pour couvrir toute la zone visible (à l'exception de la barre d'état ou de tout onglet ou contrôleur de navigation). Sélectionnez le bouton, puis accédez au menu Disposition et sélectionnez Envoyer à l'arrière. Définissez également le type du bouton sur personnalisé, qui est invisible si vous ne lui fournissez pas spécifiquement de code de dessin.

Connectez l'événement Touch Up Inside du bouton à l'action backgroundTouch: et essayez-le.

115
HitScan

Utilisez cette solution simple

Pour Swift 4:

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

Pour Swift 2:

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

Pour l'objectif C:

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

Fonctionne avec UITextField, UITextView et toutes les sous-vues.

73
Shahid Aslam

Oubliez de mettre un bouton en arrière-plan une solution simple

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.textfieldName resignFirstResponder];
}
16
alex

il y a un tutoriel sur ce problème (concernant également le clavier numérique sans touche DONE) sur ici

4
JC

Pour> iOS 4.0, il existe une autre solution (et peut-être mieux) Avec ce code, appuyez une fois n'importe où en vue pour masquer le clavier.

// single tap to resign keyboard
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithBlock:^(UIGestureRecognizer *rec){
            [input_text resignFirstResponder];
        }];
self.singleTapRecognizer.numberOfTapsRequired = 1;
self.singleTapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:singleTapRecognizer];
4
Val

Envoyez resignFirstResponder au contrôle.

2
Chris Lundie

Vous pouvez également procéder de cette façon

Masquer le clavier en touchant l'arrière-plan en vue

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

Le code suivant fonctionne correctement avec le projet iOS xamarin:

public override void TouchesBegan (NSSet touches, UIEvent evt){
    View.EndEditing (true);
}
1
T. Naik

Cette solution devrait fonctionner correctement si vous travaillez avec Swift et iOS 8/9:

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
         self.view.endEditing(true)
    }
0
gbdavid

Je n'ai pas pu compiler la réponse de Val ci-dessus en utilisant le sélecteur 'initWithBlock:'.

Ce code fonctionne pour moi. Ajoutez cela à la méthode définissant la vue - notez que ma vue est composée et que la sous-vue à laquelle je veux répondre au simple toucher est "chatView". La vue du champ de saisie qui utilise le clavier est nommée "chatInput".

    // single tap to resign (hide) the keyboard
    UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
    singleTapRecognizer.numberOfTouchesRequired = 1;
    singleTapRecognizer.cancelsTouchesInView = NO;
    [chatContent addGestureRecognizer:singleTapRecognizer];

Ajoutez ensuite la méthode de gestion des taps.

/**
 * Handles a recognized single tap gesture.
 */
- (void) handleTapFrom: (UITapGestureRecognizer *) recognizer {
    // hide the keyboard
    NSLog(@"hiding the keyboard");
    [chatInput resignFirstResponder]; 
}
0
Stephen Reed

J'avais aussi ce problème, c'était très ennuyeux. Mais j'ai compris comment se débarrasser du clavier par accident. Supposons que vous envoyez un SMS à John, et qu'il y ait un clavier qui vous empêche de visualiser vos conversations et donc de réduire l'écran que vous pouvez voir. Eh bien, cliquez sur les messages dans la partie supérieure gauche, puis sélectionnez une autre personne avec laquelle vous avez un enregistrement de textos, puis appuyez à nouveau sur les messages dans le coin supérieur gauche. Revenez ensuite en arrière et sélectionnez John. Non, vous êtes de retour à la conversation avec John, le clavier est parti. Les coutures aiment beaucoup mais c'est assez rapide. On pourrait penser qu'ils viennent de mettre un bouton de masquage sur le clavier lol Hope qui aide, ou était assez clair.

0
tinpony72