53 votes

Comment fermer le clavier numérique en tapant n'importe où

J'aimerais connaître le code le plus simple pour ignorer le pavé numérique lorsque vous appuyez n'importe où en dehors du pavé numérique. C'est une application simple qui permet de saisir un numéro dans un champ de texte. L'utilisateur peut ensuite fermer le clavier une fois que l'utilisateur a fini de saisir les chiffres dans le champ de texte. Merci! :)

85voto

Filip Radelic Points 18860

Déclarer le champ de texte comme variable d'occurrence ou propriété s'il ne l'est pas déjà et implémenter une méthode simple comme celle-ci:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [textField resignFirstResponder];
}
 

fera très bien.

21voto

Gajendra K Chauhan Points 1340

Essayez cette méthode,

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

Maintenant, appuyez n'importe où et le clavier disparaîtra. :-)

8voto

abdul sathar Points 21

Pour utiliser rapidement le code ci-dessous

 override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
 {
       textFiled.resignFirstResponder()
 }
 

6voto

rptwsthi Points 4796

Toucher le Fond pour Fermer le Clavier

Aller à Xcode si vous n'y êtes pas déjà. Nous avons besoin d'ajouter une action de plus en plus à notre contrôleur de classe. Ajoutez la ligne suivante à votre Control_FunViewController.h fichier:

#import <UIKit/UIKit.h>
@interface Control_FunViewController : UIViewController { 
UITextField *nameField;
UITextField *numberField;
}
 @property (nonatomic, retain) IBOutlet UITextField *nameField; ]
@property (nonatomic, retain) IBOutlet UITextField *numberField; 
- (IBAction)textFieldDoneEditing:(id)sender; 
- (IBAction)backgroundTap:(id)sender; 
@end  

Enregistrez le fichier d'en-tête; passer à la mise en œuvre de fichier, et ajouter ce code, qui indique simplement les deux champs de texte pour un rendement de premier répondant état, si elles en ont. Il est parfaitement possible d'appeler des resignFirstResponder sur un contrôle qui n'est pas le premier intervenant, afin que nous puissions l'appeler sur les deux champs de texte sans avoir à vérifier si l'un des deux est le premier intervenant.

- (IBAction)backgroundTap:(id)sender { 
[nameField resignFirstResponder]; 
[numberField resignFirstResponder];
}

ASTUCE Enregistrez ce fichier et revenir à l'Interface Builder. Nous avons maintenant besoin de changer la classe sous-jacente de notre plume de vue. Si vous regardez à la pointe de la fenêtre principale , vous verrez qu'il y a trois icônes de ce point de vue. La troisième, appelée Vue, est notre plume de l'écran principal qui contient tous les autres contrôles et les vues comme des sous-vues. Simple-cliquez sur l'icône de la Vue, qui représente notre plume du conteneur de vue. Appuyez sur ␣4 pour afficher l'identité de l'inspecteur. C'est là que nous pouvons changer la classe sous-jacente de toute instance de l'objet dans Interface Builder.

Vous serez commutation entre en-tête et les fichiers de mise en œuvre beaucoup comme vous le code. Heureusement, Xcode a une combinaison de touches qui vous permettra de basculer entre ces fichiers rapidement. La combinaison de touches par défaut est ␣␣␣ (option-commande-flèche vers le haut), mais vous pouvez le changer à tout ce que vous voulez en utilisant Xcode préférences.76

Le champ intitulé de la Classe actuellement dit UIView. Modifier pour lire UIControl. Tous les contrôles qui sont capables de déclencher des méthodes d'action sont des sous-classes de UIControl, par la modification de la classe sous-jacente, nous avons juste donné ce point de vue la possibilité de déclencher des méthodes d'action. Vous pouvez le vérifier en appuyant sur ␣2 pour faire les connexions de l'inspecteur.

Faites glisser à partir de la Touche vers le Bas de l'événement pour le Propriétaire du Fichier icône et choisissez la backgroundTap: action. Maintenant, touche n'importe où dans la vue sans un contrôle actif de déclencher notre nouvelle méthode d'action, qui va provoquer le clavier pour se rétracter.

NOTE Enregistrer la plume, et nous allons revenir en arrière et essayer. Compiler et exécuter votre application à nouveau. Cette fois, le clavier devrait disparaître, non seulement lorsque le bouton est actionné, mais aussi lorsque vous cliquez sur n'importe où ce n'est pas un contrôle actif, qui est le comportement de vos utilisateurs attendent.

4voto

mbm29414 Points 4133

J'ai essayé la mise en œuvre de certaines des solutions ici et constaté qu'il y avait quelques problèmes avec eux. Notamment, Mon UIView contient un UIScrollView, ce qui apparaît à intercepter les touches.

Lorsque cela a échoué, j'ai considéré que "tapant n'importe où" est un peu d'un comportement quelconque, demandant à l'utilisateur de deviner comment faire pour faire disparaître le clavier au lieu de leur donner des orientations claires.

Aussi, j'ai un "Retour" ou le bouton "Terminé" sur tous les autres clavier je montre dans l'application, donc je suis déterminé à donner à l'utilisateur un moyen facile, intuitive, clairement spécifié de manière à fermer le clavier avec un Pavé numérique qui a été en ligne avec les autres clavier licenciement des mécanismes en cours d'utilisation.

Je me rends compte que ce n'est pas ce que l'OP est expressément demandé, mais je crois que c'est une meilleure solution que le "robinet" n'importe où" la demande (et c'est facile à mettre en œuvre!).

Le code suivant est appelé dans le cadre de l' -viewDidLoad mon UIViewController.

// My app is restricted to portrait-only, so the following works
UIToolbar *numberPadAccessoryInputView      = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44.0f)];

// My app-wide tint color is a gold-ish color, so darkGray contrasts nicely
numberPadAccessoryInputView.barTintColor    = [UIColor darkGrayColor];

// A basic "Done" button, that calls [self.textField resignFirstResponder]
UIBarButtonItem *numberPadDoneButton        = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self.textField action:@selector(resignFirstResponder)];

// It's the only item in the UIToolbar's items array
numberPadAccessoryInputView.items           = @[numberPadDoneButton];

// In case the background of the view is similar to [UIColor darkGrayColor], this
// is put as a contrasting edge line at the top of the UIToolbar
UIView *topBorderView                       = [[UIView alloc] initWithFrame:CGRectMake(0, 0, numberPadAccessoryInputView.frame.size.width, 1.0f)];
topBorderView.backgroundColor               = [UIColor whiteColor];
[numberPadAccessoryInputView addSubview:topBorderView];

// Make it so that this UITextField shows the UIToolbar
self.textField.inputAccessoryView           = numberPadAccessoryInputView;

Avec cela, il y a une belle, jolie, un contrôle intuitif ajouté à la partie supérieure du clavier qui indique clairement comment l'utilisateur doit procéder lorsqu'ils ont fini avec leur de saisie de texte.

Je continue à croire qu'Apple devrait fournir un bouton "Terminé" pour ce clavier (comme le lien posté par Janak Nirmal), mais c'est le plus élégant de la non-Apple solution pour moi.

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