SWRevealViewController rejette le clavier lors d'un balayage
-
21-12-2019 - |
Question
j'utilise SWRevealViewController dans mon application et j'ai un problème.J'ai un champ de texte dans une scène, si je glisse vers la gauche lorsque le clavier est ouvert, le menu apparaît mais il ne fait pas disparaître le clavier.Comment puis-je fermer le clavier en glissant vers la gauche ?
j'ai essayé
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
-(void)dismissKeyboard
{
[self.textField resignFirstResponder];
}
mais ça ne marche pas, je pense parce que j'utilise déjà un panGestureRecognizer pour révélationViewcontroller c'est-à-dire [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
j'utilise aussi UITapGestureRecognizer
mais cela ne fonctionne que pour appuyer, pas pour glisser.
La solution
je pense que vous devez utiliser l'une des méthodes déléguées dans le délégué de l'application, il est donc possible que des méthodes déléguées soient là, mais vous devez faire quelque chose comme ci-dessous
n'ajoute aucun geste
utiliser ce délégué dans le appDelegate
supprimer toutes les macros commence par #if
je n'ai pas besoin de ça
Mettez un point d’arrêt dans l’application déléguez cette méthode
ci-dessous la méthode de délégation est mise en cellule à chaque fois SWRevealViewController
déplacé ou tranché ..
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
{
// NSLog( @"%@: %@", NSStringFromSelector(_cmd), [self stringFromFrontViewPosition:position]);
if(position == FrontViewPositionRight) //check the where to move
{
UINavigationController *viewController = revealController.frontViewController;
if([viewController.visibleViewController isKindOfClass:[FrontViewController class]])
{
[(FrontViewController *)viewController.visibleViewController dismissKeyboard]; //where this is the method declared in the FrontViewController.h file
}
}
}
Il y a toujours un avertissement, ça marche, ça marche, ça met le point d’arrêt et vérifie J’espère que cela vous aidera ...
dans FrontViewController.h
-(void)dismissKeyboard; //add this
dans le FrontViewController.m
-(void)dismissKeyboard
{
if([self.textField isFirstResponder]) //check
[self.textField resignFirstResponder];
}
Autres conseils
J'ai eu le même problème.
J'ai ajouté self.revealController.delegate = self;
à mon View Controller que j'ai utilisé comme Front View.Et la méthode déléguée est appelée.
j'ai utilisé - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{}
méthode déléguée et j'ai écrit [textField endEditing:YES];
dans cette méthode déléguée.
Également ajouté <SWRevealViewControllerDelegate>
à mon ViewController.h qui est ma vue de face.
Essayez ceci:
Veuillez ajouter le code ci-dessous dans swrevealviewContoller.m dans la méthode - (BOOL) _PANGESTURSHOULDBEGIN
[Self.View Endditing: Oui];
Tout d'abord, vous devez remplacer la méthode de Realtoggle: méthode de votre méthode personnalisée comme celle-ci:
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"reveal-icon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(myMethod)];
self.navigationItem.leftBarButtonItem = barBtn;
et que dans votre méthode:
-(void)myMethod{
[self.view endEditing:YES];
SWRevealViewController *reveal = self.revealViewController;
[reveal revealToggleAnimated:YES];
}
Cela fonctionnera sûrement.
Essayez ceci
[[[self revealViewController] view] endEditing:YES]
ajoutez ceci dans
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
ou toute autre méthode de délégation basée sur votre exigence.
Vérifiez la position actuelle de FrontView et d'écriture du code de masquage du clavier en si condition.
Êtes-vous sûr que self.textField
est le premier intervenant actuel ?Si vous essayez de démissionner du premier intervenant dans le UIGestureRecognizer
méthode du délégué – gestureRecognizerShouldBegin:
Renvoyez évidemment OUI dans cette fonction.
Modifier la méthode ci-dessous dans
swrevealviewContoller.m
(IBAction)revealToggle:(id)sender {
[self.view endEditing:YES];
[self revealToggleAnimated:YES];
}