SWRevealViewController отключает клавиатуру при свайпе

StackOverflow https://stackoverflow.com//questions/23011975

  •  21-12-2019
  •  | 
  •  

Вопрос

Я использую SWRevealViewController в моем приложении, и у меня возникла проблема.У меня есть текстовое поле в сцене, если я проведу пальцем влево, когда клавиатура открыта, появится меню, но оно не закрывает клавиатуру.Как мне отключить клавиатуру при свайпе влево?

Я пытался

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

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

но это не работает, я думаю, потому что я уже использую panGestureRecognizer для revealViewcontroller, т.е. [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

Я также использую UITapGestureRecognizer но это работает только для касания, а не для свайпа.

Это было полезно?

Решение

я думаю, вам нужно использовать один из методов делегирования в приложении delegate, так что, возможно, методы делегирования существуют, но вам нужно сделать что-то вроде приведенного ниже

не добавляйте никаких жестов

используйте этот делегат в appDelegate удалить все макросы, начинающиеся с #if мне это не нужно

поставьте точку останова в делегировании приложения этому методу ниже метода делегирования, который каждый раз указывается в ячейке SWRevealViewController перемещенный или нарезанный ломтиками ..

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

   }
}

есть одно предупреждение, все еще оно работает, поставьте точку останова и проверьте , надеюсь, это вам поможет...

в FrontViewController.h

  -(void)dismissKeyboard; //add this 

в FrontViewController.m

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

Другие советы

У меня была такая же проблема.

Я добавил self.revealController.delegate = self; к моему контроллеру представления, который я использовал в качестве вида спереди.И вызывается метод делегирования.

Я использовал - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{} делегируйте метод, и я написал [textField endEditing:YES]; в этом методе делегирования.

Также добавлено <SWRevealViewControllerDelegate> к моему ViewController.h, который является моим видом спереди.

Попробуйте:

Пожалуйста, добавьте следующий код в SWREVEALVIVECONTOLLER.M в методе - (Bool) _pangestureshouldbegin

[Self.View Endediting: Да];

Прежде всего, вам нужно заменить раскрытие: метод по вашему пользовательскому методу, как это:

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

self.navigationItem.leftBarButtonItem = barBtn;
.

а чем в вашем методе:

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

Это наверняка будет работать.

попробуйте это

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

Добавьте это в

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

или любой другой метод делегата на основе вашего требования.

Проверьте текущую позицию FrontView и записывать код укрытия в случае состояния.

Вы уверены, что self.textField является ли текущий сотрудник службы экстренного реагирования?Если это так, попробуйте уволить сотрудника службы экстренного реагирования в UIGestureRecognizer метод делегата – gestureRecognizerShouldBegin:

Очевидно, что в этой функции возвращается значение YES.

Изменить метод ниже в

SWREVEALVIVECONTOLLER.M

(IBAction)revealToggle:(id)sender {
    [self.view endEditing:YES];
    [self revealToggleAnimated:YES]; 
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top