3

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

我努力了

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

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

但它不起作用,我想是因为我已经在使用 panGestureRecognizer 来显示视图控制器,即[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

我也在使用UITapGestureRecognizer,但它只适用于点击而不是滑动。

4

8 回答 8

4

I had the same problem.

I added self.revealController.delegate = self; to my View Controller which I used as Front View.And delegate method get called.

I used - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{} delegate method and I wrote [textField endEditing:YES]; in this delegate method.

Also added <SWRevealViewControllerDelegate> to my ViewController.h which is my Front View.

于 2014-10-22T08:11:42.317 回答
3

我认为您需要在应用程序委托中使用其中一种委托方法,因此可能存在委托方法,但您需要执行以下操作

不要添加任何手势

在删除所有以不需要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];
 }
于 2014-04-11T12:25:44.057 回答
1

尝试这个

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

添加这个

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

或根据您的要求的任何其他委托方法。

于 2014-04-15T14:47:32.910 回答
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];
}

它肯定会奏效。

于 2014-09-02T04:34:19.740 回答
1

尝试这个:

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

[self.view endEditing:YES];

于 2014-06-30T11:11:03.433 回答
0

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

显然在该函数中返回 YES。

于 2014-04-11T12:17:49.997 回答
0

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

于 2014-04-11T12:07:13.370 回答
0

编辑下面的方法

SWRevealViewContoller.m

(IBAction)revealToggle:(id)sender {
    [self.view endEditing:YES];
    [self revealToggleAnimated:YES]; 
}
于 2018-12-12T08:50:59.573 回答