SWRevealViewController:显示后视时移除前视上的交互 [英] SWRevealViewController: Remove interaction on frontview when rearview is revealed

查看:12
本文介绍了SWRevealViewController:显示后视时移除前视上的交互的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当显示后视图时,我需要禁用前视图上的用户交互.发现其他一些人提出了同样的问题,但无法真正理解在哪里或如何实现我所看到的代码.

I need to disable user interaction on front view when rear view is revealed. Found some others asking the same thing but can't really understand where or how to implement the code that I've seen.

例如:我从链接中找到了此代码,

Ex: I found this code from link,

- (void)revealController:(SWRevealViewController *)revealController 
      willMoveToPosition:(FrontViewPosition)position {
    if(position == FrontViewPositionLeft) {
        self.view.userInteractionEnabled = YES;
    } else {
        self.view.userInteractionEnabled = NO;
    } 
}

- (void)revealController:(SWRevealViewController *)revealController 
       didMoveToPosition:(FrontViewPosition)position {
    if(position == FrontViewPositionLeft) {
        self.view.userInteractionEnabled = YES;
    } else {
        self.view.userInteractionEnabled = NO;
    } 
}

还发现了一些其他的链接

Also found few other links

我有此代码,但不确定插入此代码的正确位置.我尝试将它添加到我的前/后视图以及 SWRevealViewController 方法中,但没有成功

I have this code, but not really sure about the correct place to insert this code. I've tried adding it in my front/rear views and also in the SWRevealViewController method with no success

感谢有人能指出我正确的方向.

Appreciate if someone can point me in the right direction.

推荐答案

我最近想出了一个我想分享的解决方案(抱歉,如果晚了 2 个月).

I've recently come up with a solution that I wanted to share (sorry if it's 2 months late).

为了在菜单打开时禁用前视图上的用户交互,我在我的 MenuViewController 上添加了以下代码:

To disable user interaction on the Front View while the Menu is open, I added the following codes on my MenuViewController:

viewWillAppear上:

[self.revealViewController.frontViewController.view setUserInteractionEnabled:NO];

以及viewWillDisappear:

[self.revealViewController.frontViewController.view setUserInteractionEnabled:YES];

这将禁用前视图控制器上的所有用户交互,这意味着关闭菜单的滑动/点击手势也将被禁用.

This will disable all user interactions on the Front View Controller, which means that the slide / tap gestures to CLOSE the menu will also be DISABLED.

现在,我创建了一个 ParentViewController 并使所有视图控制器(菜单项)成为它的子类.

Now, I have created a ParentViewController and made all the view controllers (the menu items) a subclass of it.

在我的 viewDidLoad 上,我输入了以下代码:

on my viewDidLoad, I put the following codes:

SWRevealViewController *revealController = [self revealViewController];
[revealController panGestureRecognizer];
[revealController tapGestureRecognizer];

如果此时您运行您的应用程序,似乎点击手势有效(点击前视图将关闭菜单),而不是平移手势.我不确定为什么会这样,但为了启用滑动手势来关闭菜单,请在 MenuViewController 中添加以下代码:

If you run your app at this point, it would appear that the Tap Gesture works (a tap on the Front View will close the Menu), but NOT the Pan Gesture. I'm not sure why this is so, but in order to enable the slide gesture to CLOSE your menu, add the following code in your MenuViewController:

viewWillAppear 上:

[self.revealViewController.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

总而言之,您需要的是:

在您的 MenuViewController 上:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self.revealViewController.frontViewController.view setUserInteractionEnabled:NO];
    [self.revealViewController.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}

-(void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];

    [self.revealViewController.frontViewController.view setUserInteractionEnabled:YES];
}

在您的菜单项的视图控制器上(您可以为所有菜单项创建一个 ParentViewController):

And on your menu items' view controller (you can make a ParentViewController for all of them):

-(void)viewDidLoad {
    [super viewDidLoad];

    SWRevealViewController *revealController = [self revealViewController];
    [revealController panGestureRecognizer];
    [revealController tapGestureRecognizer];
}

希望这有帮助!

这篇关于SWRevealViewController:显示后视时移除前视上的交互的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆