ios – SWRevealViewController:当后视显示时,删除前视图上的交互

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

例如:我从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;
    } 
}

还发现几个其他链接

> Link1
> Link2
> Link3

我有这个代码,但不能确定插入代码的正确位置.我已经尝试将其添加到我的前/后视图,也在SWRevealViewController方法中没有成功

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

解决方法

我最近想出了一个我想分享的解决方案
(对不起迟到2个月).

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

在viewWillAppear:

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

并在viewWillDisappear:

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

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

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

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

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

如果您现在运行应用程序,则会出现Tap Gesture的工作原理(在Front View上点按可以关闭菜单),而不是Pan Gesture.我不知道为什么这是这样,但为了使幻灯片手势关闭您的菜单,在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):

-(void)viewDidLoad {
    [super viewDidLoad];

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

希望这可以帮助!

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...