SWRevealViewController在滑动时关闭键盘

时间:2014-04-11 12:00:03

标签: ios swrevealviewcontroller

我在我的应用中使用SWRevealViewController,我遇到了问题。我在场景中有一个文本字段,如果我在键盘打开时向左滑动,菜单会出现,但它不会关闭键盘。如何在左侧滑动时关闭键盘?

我试过了

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

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

但它不起作用,我想是因为我已经在使用了一个用于revealViewcontroller的panGestureRecognizer,即[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

我也在使用UITapGestureRecognizer,但它仅适用于点击而非滑动。

8 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。

我将self.revealController.delegate = self;添加到我用作Front View的View Controller中。调用委托方法。

我用过  - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{} 委托方法,我在这个委托方法中写了[textField endEditing:YES];

还将<SWRevealViewControllerDelegate>添加到我的ViewController.h,这是我的前视图。

答案 1 :(得分:3)

我认为你需要在app委托中使用其中一个委托方法,所以可以委托方法,但你需要做下面的事情

不要添加任何手势

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

答案 2 :(得分:1)

试试这个

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

中添加此内容
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position 

或基于您的要求的任何其他委托方法。

答案 3 :(得分:1)

首先,您需要使用自定义方法替换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];
}

一定会有用。

答案 4 :(得分:0)

检查前视图的当前位置,并在if条件下编写隐藏键盘的代码。

答案 5 :(得分:0)

您确定self.textField是当前的第一响应者吗?如果您尝试使用UIGestureRecognizer委托方法– gestureRecognizerShouldBegin:

重新辞职第一响应者

显然在该功能中返回YES。

答案 6 :(得分:0)

试试这个:

请在方法中的SWRevealViewContoller.m中添加以下代码 - (BOOL)_panGestureShouldBegin

[self.view endEditing:YES];

答案 7 :(得分:0)

中编辑以下方法
  

SWRevealViewContoller.m

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