我在我的应用程序中使用SWRevealViewController,我遇到了问题。我在场景中有一个文本字段,如果我在键盘打开时向左滑动,菜单会出现,但它不会关闭键盘。如何在左侧滑动时关闭键盘?
我试过了
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
-(void)dismissKeyboard
{
[self.textField resignFirstResponder];
}
但它不起作用,我想是因为我已经在使用了一个panGestureRecognizer for revealViewcontroller,即[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
我也使用UITapGestureRecognizer
但它只适用于轻拍而不是刷卡。
我认为你需要在app委托中使用一个委托方法,所以可以委托方法,但你需要做下面的事情
不要添加任何手势
在appDelegate
中使用此委托删除所有以#if
开头的宏不需要
在每次SWRevealViewController
移动或切片时,在下面委托方法的app方法中放置一个断点。
- (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;
添加到我的View Controller中,我将其用作Front View.And委托方法被调用。
我使用了- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{}
委托方法,并在此委托方法中编写了[textField endEditing:YES];
。
还将<SWRevealViewControllerDelegate>
添加到我的ViewController.h,这是我的前视图。
试试这个:
请在方法中的SWRevealViewContoller.m中添加以下代码 - (BOOL)_panGestureShouldBegin
[self.view endEditing:YES];
首先,您需要使用自定义方法替换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];
}