SWRevealViewController отклоняет клавиатуру при смахивании

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

я пытался

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

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

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

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


person AL̲̳I    schedule 11.04.2014    source источник
comment
увидеть мой ответ надеюсь, что это поможет тебе ..   -  person Shankar BS    schedule 11.04.2014
comment
смотри, я обновил свой ответ, проверь это   -  person Shankar BS    schedule 14.04.2014


Ответы (8)


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

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

используйте этот делегат в 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
      }

   }
}

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

in FrontViewController.h

  -(void)dismissKeyboard; //add this 

в FrontViewController.m

 -(void)dismissKeyboard
 {
      if([self.textField isFirstResponder]) //check
         [self.textField resignFirstResponder];
 }
person Shankar BS    schedule 11.04.2014
comment
Спасибо за ответ, но у меня он не работает .... Он говорит _1 _.... знаете ли вы, какой метод вызывается первым, когда появляется боковое меню? - person AL̲̳I; 11.04.2014
comment
ну, конечно, я добавил - (void) dismissKeyboard в файл .h :), но я не добавил делегата ... теперь ошибка исчезла, но метод никогда не вызывается: (... если он работает для вас, вы должны делать что-то еще .. Не могли бы вы поделиться своим проектом, пожалуйста (просто пример, который работает)? Спасибо - person AL̲̳I; 14.04.2014
comment
хорошо, вы удалили условия #if ...? а также установите делегат в Appdelegate, если вы используете демонстрационный проект, тогда он добавлен в делегат приложения, убедитесь, что вы добавили эту строку `ShowController.delegate = self; // добавляем эту строку в `didFinishLaunchingWithOptions` - person Shankar BS; 14.04.2014
comment
да, строка `ShowController.delegate = self;` есть ... которую, если условие, я должен удалить - person AL̲̳I; 14.04.2014
comment
макросы, которые начинаются с #if - person Shankar BS; 14.04.2014
comment
@Ali, если у вас все еще проблема, приходите в чат chat.stackoverflow.com/rooms/49117/ios-help - person Shankar BS; 14.04.2014
comment
Ооооо да .... Я не удалял #if, поэтому методы делегата не вызывались .. Большое спасибо .. Вы спасаете жизнь ... - person AL̲̳I; 14.04.2014
comment
Теперь я устанавливаю SWRevealViewcontrollerDelegate для каждого ViewController, где у меня есть текстовые поля, и отключаю клавиатуру в методе didMoveToPosition. Спасибо - person AL̲̳I; 14.04.2014
comment
позвольте нам продолжить это обсуждение в чате - person Shankar BS; 14.04.2014

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

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

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

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

person Okhan Okbay    schedule 22.10.2014

Попробуй это:

Добавьте приведенный ниже код в SWRevealViewContoller.m в методе - (BOOL) _panGestureShouldBegin

[self.view endEditing: ДА];

person satheesh    schedule 30.06.2014

Прежде всего, вам нужно заменить метод ReveToggle: на свой собственный, например:

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];
}

Это обязательно сработает.

person Hiren    schedule 02.09.2014
comment
Это отличное решение для меня, потому что структура моего приложения слишком сложна, чтобы сделать то же самое с реализацией делегата в AppDelegete. Большое спасибо :) - person ayon; 17.03.2015

Попробуй это

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

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

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

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

person NKB    schedule 15.04.2014

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

person Mayank Jain    schedule 11.04.2014
comment
Не могли бы вы привести пример, какой метод мне следует использовать? Благодарность - person AL̲̳I; 11.04.2014

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

Очевидно, верните YES в этой функции.

person Antonio E.    schedule 11.04.2014

Отредактируйте приведенный ниже метод в

SWRevealViewContoller.m

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