MMDrawerController:推送viewcontroller表单应用程序打开URL

时间:2016-05-25 13:52:36

标签: ios objective-c deep-linking mmdrawercontroller

我有一个应用程序,它是表视图中的itens列表,并向表视图中的每个项目显示详细视图控制器。它还将MMDrawerController(根视图控制器)实现为带有故事板的侧边菜单。 我正在深入链接我的应用程序并使用App Delegate中的应用程序开放URL源应用程序注释方法来处理它。所以,我想使用MMDrawerController从这个方法推出一个详细视图控制器,我遇到了一些麻烦。 看看一些代码:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
      DetalheRestauranteViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"detalheRest"];

      MMDrawerController* drawerController = (MMDrawerController *)self.window.rootViewController;
      // If I use this nothing happens        
      [drawerController.centerViewController.navigationController pushViewController:vc animated:YES];

      // If I use this nothing happens      
      [((MMDrawerController *)self.window.rootViewController).centerViewController.navigationController pushViewController:vc animated:YES];

     // If I use this I got the unrecognized selector error       
     [(UINavigationController*)self.window.rootViewController pushViewController:vc animated:NO];

    return YES;
}

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

我发现通过深度链接和新的iOS9菜单快捷方式,显示或操作UI组件通常需要很小的延迟。

我会尝试将所有UI / MMDrawer代码移动到自己的方法中。然后,当您的app delegate中调用openURL时,请在延迟时调用新方法。

所以在ObjC中它看起来像这样:

 [self performSelector:@selector(showDetailView) withObject:nil afterDelay:0.3];

答案 1 :(得分:0)

您解决了这个问题吗?

我尝试了很多次。终于,我发现今天它对我来说很好用:

[((UINavigationController *)((MMDrawerController *)self.window.rootViewController).centerViewController)  pushViewController:viewController animated:YES];

MMDrawerController *mvc = (MMDrawerController *)self.window.rootViewController;
UINavigationController *nvc = (UINavigationController *)mvc.centerViewController;
[nvc pushViewController:vc animated:YES];

这两种写作是相同的。

这里vc是一个DetalheRestauranteViewController实例。