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
但它只适用于点击,不适用于滑动。
解决方案
我认为您需要使用应用程序委托中的委托方法之一,因此可能有委托方法,但您需要执行如下操作
不要添加任何手势
在中使用此委托 appDelegate
删除所有以以下开头的宏 #if
不需要那个
在App委托中将突破点委托给该方法下面的下面的委托方法单元格 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 这是我的前视图。
尝试这个:
请在 SWRevealViewContoller.m 的方法 -(BOOL)_panGestureShouldBegin 中添加以下代码
[self.view结束编辑:是];
首先你需要替换revealToggle:方法通过您的自定义方法,如下所示:
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
或根据您的要求的任何其他委托方法。
检查前视图的当前位置,并在 if 条件下编写隐藏键盘的代码。
你确定吗 self.textField
是当前的第一响应者吗?如果您尝试辞去第一响应者的职务 UIGestureRecognizer
委托方法 – gestureRecognizerShouldBegin:
显然在该函数中返回 YES。
编辑以下方法
SWRevealViewContoller.m
(IBAction)revealToggle:(id)sender {
[self.view endEditing:YES];
[self revealToggleAnimated:YES];
}