使用来自AppDelegate的SWReveal手势打开ViewController

时间:2015-08-12 23:35:47

标签: ios objective-c iphone uiviewcontroller swrevealviewcontroller

我正在开发iOS应用并使用故事板。在我的故事板中,我设置了一个SWRevealView控制器,它工作正常。

现在我有一个新的要求,我需要在收到推送通知后提供一个viewcontroller,这是来自appdelegate的揭示中的rear_vc的一个选项。

在appdelegate中我使用下一个方法来实例化并显示视图控制器

- (void)showViewController {

   UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
   TheViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"vc"];
   [self.window makeKeyAndVisible];
   [self.window.rootViewController presentViewController:vc animated:YES completion:NULL];

}

因此,由于viewcontroller是后视图控制器的一个选项,我需要添加手势识别器来显示菜单

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

这就是我遇到问题的地方,因为self.revealViewController是nil,应用程序崩溃了,因为segue不是直接来自后视图控制器。

在后视控制器准备segue方法时,我们需要添加这行

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) {

        SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;

        swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue,   UIViewController* svc, UIViewController* dvc) {

        UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
        [navController setViewControllers: @[dvc] animated: NO ];
        [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
        };
    }
}

但是从appdelegate我不能这样做,怎么能实现呢?

由于

0 个答案:

没有答案