SWRevealViewController dispensa o teclado ao deslizar
-
21-12-2019 - |
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.
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 appDelegate
excluir 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];
}