SwrevealViewController licenserò la tastiera su Swipe
-
21-12-2019 - |
Domanda
Sto usando swrevealviewcontroller nella mia app e sto avendo un problema.Ho un campo di testo in una scena, se swipo a sinistra quando la tastiera è aperta, il menu appare ma non ha chiuso la tastiera.Come posso licenziare la tastiera sul colpo sinistro?
Ho provato
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
-(void)dismissKeyboard
{
[self.textField resignFirstResponder];
}
.
Ma non funziona, penso perché sto già usando un pangesterrecognizer per RevealviewController I.e. [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
Sto anche usando UITapGestureRecognizer
ma funziona solo per il rubinetto non per il colpo.
Soluzione
Penso che tu abbia bisogno di utilizzare uno dei metodi delegati nel delegato dell'app sono così potrebbero delegare i metodi lì ma hai bisogno di qualcosa come sotto
non aggiungere qualsiasi gesti
Utilizzare questo delegato nel appDelegate
Elimina tutte le macro inizia con #if
Don`t Bis Bis Bis Bis Bis Detch
Metti un punto di interruzione nell'app Delegato a questo metodo
Sotto Delegate Method Celled Ogni volta che viene generato SWRevealViewController
Spostato o affettato ..
- (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
}
}
}
.
C'è ancora un avvertimento funziona ancora un punto di rottura e controllare Spero che questo ti aiuti ...
in FrontViewController.h
-(void)dismissKeyboard; //add this
.
nel FrontViewController.m
-(void)dismissKeyboard
{
if([self.textField isFirstResponder]) //check
[self.textField resignFirstResponder];
}
. Altri suggerimenti
Ho avuto lo stesso problema.
Ho aggiunto self.revealController.delegate = self;
al controller di visualizzazione che ho usato come vista frontale. E il metodo Delegate viene chiamato.
Ho usato
- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{}
.
Metodo Delegate e ho scritto [textField endEditing:YES];
in questo metodo delegato.
ha anche aggiunto <SWRevealViewControllerDelegate>
al mio viewcontroller.h qual è la mia vista frontale.
Prova questo:
Si prega di aggiungere il codice qui sotto in swrevealviewcontoller.m nel metodo - (bool) _PangesturesHouldBegin
[Self.View ENDEDING: Sì];
Prima di tutto è necessario sostituire il rivelatore: metodo del tuo metodo personalizzato come questo:
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"reveal-icon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(myMethod)];
self.navigationItem.leftBarButtonItem = barBtn;
.
E che nel tuo metodo:
-(void)myMethod{
[self.view endEditing:YES];
SWRevealViewController *reveal = self.revealViewController;
[reveal revealToggleAnimated:YES];
}
.
funzionerà sicuramente.
Prova questo
[[[self revealViewController] view] endEditing:YES]
.
Aggiungi questo in
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
.
o qualsiasi altro metodo delegato in base alle tue esigenze.
Controllare la posizione corrente del codice di frontview e scrivi del codice di nascondiglio in se condizioni.
Sei sicuro che self.textField
sia il primo responder attuale?Se si tenta di dimettersi il primo responder nel metodo del delegato di UIGestureRecognizer
– gestureRecognizerShouldBegin:
Ovviamente ritorna Sì in quella funzione.
Modifica il metodo sotto
.swreevealviewcontoller.m
(IBAction)revealToggle:(id)sender {
[self.view endEditing:YES];
[self revealToggleAnimated:YES];
}
.