Pergunta

estou usando SWRevealViewController no meu aplicativo e estou tendo um problema.Tenho um campo de texto em uma cena, se eu deslizar para esquerda quando o teclado estiver aberto, o menu aparece mas não dispensa o teclado.Como faço para dispensar o teclado ao deslizar para a esquerda?

eu tentei

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];

-(void)dismissKeyboard
{
    [self.textField resignFirstResponder];
}

mas não funciona, acho que porque já estou usando um panGestureRecognizer para reveladoViewcontroller, ou seja, [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

Eu também estou usando UITapGestureRecognizer mas só funciona para tocar e não para deslizar.

Foi útil?

Solução

eu acho que você precisa usar um dos métodos delegados no delegado do aplicativo, então podem existir métodos delegados, mas você precisa fazer algo como abaixo

não adicione nenhum gesto

use este delegado no appDelegateexcluir todas as macros começa com #if não preciso disso

Coloque um ponto de interrupção no delegado do aplicativo para este método abaixo do método delegado celular cada vez SWRevealViewController movido ou fatiado ..

- (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
      }

   }
}

Há um aviso ainda funciona, coloque o ponto de interrupção e verifique espero que isso ajude você ...

em FrontViewController.h

  -(void)dismissKeyboard; //add this 

no FrontViewController.m

 -(void)dismissKeyboard
 {
      if([self.textField isFirstResponder]) //check
         [self.textField resignFirstResponder];
 }

Outras dicas

Eu tive o mesmo problema.

Eu adicionei self.revealController.delegate = self; ao meu View Controller que usei como Front View.E o método delegado é chamado.

eu usei - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{}método delegado e eu escrevi [textField endEditing:YES]; neste método delegado.

Também adicionado <SWRevealViewControllerDelegate> para meu ViewController.h que é meu Front View.

Experimente isto:

Adicione o código abaixo em SWRevealViewContoller.m no método -(BOOL)_panGestureShouldBegin

[self.view endEditing:SIM];

Primeiro de tudo você precisa substituir o reveladoToggle:método pelo seu método personalizado como este:

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"reveal-icon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(myMethod)];

self.navigationItem.leftBarButtonItem = barBtn;

E do que no seu método:

-(void)myMethod{
[self.view endEditing:YES];
SWRevealViewController *reveal = self.revealViewController;
[reveal revealToggleAnimated:YES];
}

Certamente funcionará.

Experimente isto

[[[self revealViewController] view] endEditing:YES]

Adicione isso em

- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position 

ou qualquer outro método delegado com base em sua necessidade.

verifique a posição atual do frontview e escreva o código para ocultar o teclado na condição if.

Você está certo disto self.textField é o socorrista atual?Se você tentar demitir o socorrista no UIGestureRecognizer método do delegado – gestureRecognizerShouldBegin:

Obviamente retorne SIM nessa função.

Edite o método abaixo em

SWRevealViewContoller.m

(IBAction)revealToggle:(id)sender {
    [self.view endEditing:YES];
    [self revealToggleAnimated:YES]; 
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top