SWRevealViewController отключает клавиатуру при свайпе
-
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];
}
.