J’ai tout à fait quelques contrôles disséminés dans plusieurs cellules d’un tableau dans ma table, et je me demandais si il existe un moyen plus facile de rejeter le clavier sans avoir à effectuer une boucle sur tous mes contrôles et leur démission tout comme le premier intervenant. Je suppose que la question est... Comment pourrais-je obtenir le premier intervenant actuel au clavier ?
Réponses
Trop de publicités?Vous pouvez forcer le mode édition de démissionner de son premier intervenant statut d' [view endEditing:YES]
. Ce qui permet de masquer le clavier.
Contrairement aux -[UIResponder resignFirstResponder]
, -[UIView endEditing:]
recherche dans les sous-vues de l'actuel premier intervenant. De sorte que vous pouvez l'envoyer à votre affichage de niveau supérieur (par exemple, self.view
en UIViewController
) et il va faire la bonne chose.
(Cette réponse précédemment inclus un couple de d'autres solutions, qui ont également travaillé, mais ont été plus compliqué que nécessaire. J'ai supprimé afin d'éviter toute confusion.)
Vous pouvez envoyer une néant une action ciblée à l’application, il va démissionner premier intervenant à tout moment sans avoir à se soucier dont la vue a actuellement premier statut de répondeur.
Des actions ciblées néant sont communes sur Mac OS X pour les commandes de menu, et voici une utilisation pour eux sur iOS.
Pour être honnête, je ne suis pas fou au sujet de toutes les solutions proposées ici. J'ai trouvé une belle façon d'utiliser un TapGestureRecognizer qui, je pense, est au cœur de votre problème: Lorsque vous cliquez sur n'importe quoi sauf le clavier, fermer le clavier.
-
Dans le viewDidLoad, vous inscrire pour recevoir le clavier de notifications et de créer un UITapGestureRecognizer:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil]; [nc addObserver:self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object:nil]; tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)];
-
Ajouter le clavier afficher/masquer les intervenants. Il vous permet d'ajouter et de supprimer la TapGestureRecognizer à la UIView que de rejeter le clavier lorsque vous appuyez dessus. Remarque: Vous n'avez pas à l'ajouter à tous les sous-points de vue ou des contrôles.
-(void) keyboardWillShow:(NSNotification *) note { [self.view addGestureRecognizer:tapRecognizer]; } -(void) keyboardWillHide:(NSNotification *) note { [self.view removeGestureRecognizer:tapRecognizer]; }
-
Le TapGestureRecognizer appelle votre fonction lorsqu'il obtient un robinet et vous pouvez fermer le clavier comme ceci:
-(void)didTapAnywhere: (UITapGestureRecognizer*) recognizer { [textField resignFirstResponder]; }
La bonne chose à propos de cette solution est qu'elle ne les filtres des Robinets, pas de glisse. Donc, si vous avez le défilement de contenu au-dessus du clavier, de glissements va encore faire défiler et laissez le clavier affiché. En supprimant le geste de reconnaissance une fois que le clavier est parti, l'avenir de robinets sur votre point de vue doit être géré normalement.
je ne suis pas vraiment sûr de savoir pourquoi on aurait besoin pour passer à travers tout cela.
considérez le scénario suivant:
j'ai un viewcontroller
avec deux objets textfield (nom d'utilisateur et mot de passe).
et l' viewcontroller
implémente UITextFieldDelegate
protocole
je le fais ce dans le viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
username.delegate = self;
password.delegate = self;
}
et le viewcontroller implémente la méthode facultative comme
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
et quel que soit le champ, dès que j'ai touché return
dans le clavier, il obtient rejeté!
Dans votre cas, le principe est le même travail tant que vous définissez tous les champs du délégué à l'autonomie et à mettre en œuvre textFieldShouldReturn
S'il vous plaît corrigez-moi si je suis absent de ce qui est évident!!
Cheers - Prakash