我在用 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]; 
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top