【问题标题】:SWRevealViewController dismiss keyboard on swipeSWRevealViewController 在滑动时关闭键盘
【发布时间】:2014-05-25 13:44:40
【问题描述】:

我在我的应用程序中使用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,但它只适用于点击而不是滑动。

【问题讨论】:

  • 看我的回答希望对你有帮助..
  • 看我更新了我的答案检查它

标签: ios swrevealviewcontroller


【解决方案1】:

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

【讨论】:

  • 你能举个例子,我应该使用哪种方法?谢谢
【解决方案2】:

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

显然在该函数中返回 YES。

【讨论】:

    【解决方案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];
     }
    

    【讨论】:

    • 感谢您的回答,但它对我不起作用......它说no visible @interface for FrontViewController declares the selector dismissKeyboard....你知道当侧面菜单出现时第一个方法被调用吗?跨度>
    • 好吧当然我在 .h 文件中添加了 -(void)dismissKeyboard :) 但我没有添加委托......现在错误消失了,但该方法永远不会被调用 :(...如果它对你有用,那么你必须做其他事情。你能分享你的项目吗(只是有效的例子)?谢谢
    • 好的,您是否删除了#if 条件...?并将委托设置为 Appdelegate,如果您使用的是演示项目,则将其添加到应用委托中,确保您添加了这一行 `revealController.delegate = self; //在`didFinishLaunchingWithOptions`中添加这一行
    • 是的 `revealController.delegate = self;` 行存在...如果条件我应该删除
    • 以#if开头的宏
    【解决方案4】:

    试试这个

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

    添加这个

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

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

    【讨论】:

      【解决方案5】:

      试试这个:

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

      [self.view endEditing:YES];

      【讨论】:

        【解决方案6】:

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

        一定会成功的。

        【讨论】:

        • 这对我来说是一个很好的解决方案,因为我的应用程序结构过于复杂,无法通过在 AppDelegete 中实现委托来实现同样的事情。非常感谢:)
        【解决方案7】:

        我遇到了同样的问题。

        我将self.revealController.delegate = self; 添加到我用作前视图的视图控制器中。委托方法被调用。

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

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

        【讨论】:

          【解决方案8】:

          编辑下面的方法

          SWRevealViewContoller.m

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

          【讨论】:

            猜你喜欢
            • 2014-12-17
            • 2016-08-25
            • 2019-01-25
            • 1970-01-01
            • 1970-01-01
            • 2017-03-25
            • 2020-02-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多