Frage

ich benutze SWRevealViewController in meiner App und ich habe ein Problem.Ich habe ein Textfeld in einer Szene. Wenn ich bei geöffneter Tastatur nach links wische, wird das Menü angezeigt, die Tastatur wird jedoch nicht ausgeblendet.Wie schließe ich die Tastatur beim Wischen mit der linken Maustaste aus?

Ich habe versucht

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

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

aber es funktioniert nicht, glaube ich, weil ich bereits einen panGestureRecognizer für revealViewcontroller verwende, d. h. [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

Ich benutze es auch UITapGestureRecognizer Aber es funktioniert nur beim Tippen, nicht beim Wischen.

War es hilfreich?

Lösung

Ich denke, Sie müssen eine der Delegate-Methoden in der App Delegate verwenden. Es gibt also möglicherweise Delegate-Methoden, aber Sie müssen etwas wie das Folgende tun

Fügen Sie keine Gesten hinzu

Verwenden Sie diesen Delegaten im appDelegateDas Löschen aller Makros beginnt mit #if brauche das nicht

Setzen Sie einen Pausenpunkt im App-Delegieren dieser Methode nachstehend ein SWRevealViewController verschoben oder in Scheiben geschnitten ..

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

   }
}

Es gibt noch eine Warnung, die es funktioniert, und überprüft, dass dies Ihnen hilft ...

In FrontViewController.h

  -(void)dismissKeyboard; //add this 

im FrontViewController.m

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

Andere Tipps

Ich hatte das gleiche Problem.

Ich fügte hinzu self.revealController.delegate = self; zu meinem View Controller, den ich als Front View verwendet habe. Und die Delegate-Methode wird aufgerufen.

ich benutzte - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{}Delegate-Methode und ich habe geschrieben [textField endEditing:YES]; in dieser Delegate-Methode.

Auch hinzugefügt <SWRevealViewControllerDelegate> zu meinem ViewController.h, der meine Vorderansicht ist.

Versuche dies:

Bitte fügen Sie den folgenden Code in SWRevealViewContoller.m in der Methode -(BOOL)_panGestureShouldBegin hinzu

[self.view endEditing:YES];

Zunächst müssen Sie den revealToggle ersetzen:Methode durch Ihre benutzerdefinierte Methode wie folgt:

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

self.navigationItem.leftBarButtonItem = barBtn;

Und dann in Ihrer Methode:

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

Es wird sicher funktionieren.

Versuche dies

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

Fügen Sie dies hinzu

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

oder eine andere Delegate-Methode basierend auf Ihren Anforderungen.

Überprüfen Sie die aktuelle Position der Vorderansicht und schreiben Sie den Code zum Ausblenden der Tastatur in diesem Zustand.

Sind Sie sicher, dass self.textField ist der aktuelle Ersthelfer?Wenn Sie versuchen, den Ersthelfer im Stich zu lassen UIGestureRecognizer Methode des Delegierten – gestureRecognizerShouldBegin:

Geben Sie in dieser Funktion offensichtlich YES zurück.

Bearbeiten Sie die folgende Methode in

SWRevealViewContoller.m

(IBAction)revealToggle:(id)sender {
    [self.view endEditing:YES];
    [self revealToggleAnimated:YES]; 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top