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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top