【问题标题】:SWRevealViewController rightViewController disable the openingSWRevealViewController rightViewController 禁用开启
【发布时间】:2017-05-21 11:28:06
【问题描述】:

我使用SWReveal视图控制器创建了侧边菜单结构。我想做的是取消在某些页面上打开右侧视图控制器。我研究并发现了这样的东西:

- (BOOL)revealControllerPanGestureShouldBegin:(SWRevealViewController *)revealController

  if([revealController.frontViewController isKindOfClass:[UINavigationController class]]){

    UINavigationController *navController = (UINavigationController *)revealController.frontViewController;

    UIViewController *lastViewController = navController.viewControllers.lastObject;

    if([lastViewController isKindOfClass:[DetailViewController class]] ||
       [lastViewController isKindOfClass:[TableDateViewController class]] ||
       [lastViewController isKindOfClass:[MapViewController class]])
    {
        return NO; // I do not want to open it for the view controllers I want
    }
 }
   return YES;   
 }

这对我有用,但它也影响了左侧页面的打开。触摸动作(点击手势)没有问题,但这适用于平移手势。我的意思是平移手势不适用于我想运行视图控制器。我想为某些视图控制器正常工作,但我不想影响左侧。 我像这样添加了正确的切换:

-(void)sideRightMenuLoad{
[((PersonelViewController *)[self.navigationController.viewControllers objectAtIndex:0]).view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

SWRevealViewController *revealViewController = self.revealViewController;
if(revealViewController){
    [self.sideRightBarButton setTarget:self.revealViewController];
    [self.sideRightBarButton setAction:@selector(rightRevealToggle:)];
    [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];


}

此代码需要工作才能打开右侧页面:

[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];

我在需要时尝试运行它,但它不起作用。 我正在等待这方面的帮助。谢谢。

【问题讨论】:

    标签: ios objective-c swrevealviewcontroller


    【解决方案1】:

    SWIFT 4

    func revealControllerPanGestureShouldBegin(_ revealController: SWRevealViewController!) -> Bool {
        let point = revealController.panGestureRecognizer().location(in: self.view)
    
        if revealController.frontViewPosition == FrontViewPosition.left && point.x < 50.0 {
            print("YES YES YES YES RRRRIIIIGGGGHHHHTTTT")
            return false
    
        }
        else if revealController.frontViewPosition == FrontViewPosition.right {
            print("YES YES YES YES LLLLEEEEFFFFTTTT")
            return true
        }
    
        return false
    }
    

    【讨论】:

    • 请始终将您的答案放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅here
    【解决方案2】:

    您必须检查平移手势的方向:

    - (BOOL)revealControllerPanGestureShouldBegin:(SWRevealViewController *)revealController {
    if ([revealController.panGestureRecognizer velocityInView:revealController.view].x < 0) {
        // pan direction left, should open right side
        // ...
        return NO;
    }
    return YES;
    

    }

    【讨论】:

      猜你喜欢
      • 2014-08-22
      • 2015-09-14
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多