ios:从app delegate访问导航控制器

时间:2013-01-02 18:05:55

标签: ios uinavigationcontroller push-notification pushviewcontroller uiapplicationdelegate

我有一个接收推送通知的应用。在didReceiveRemoteNotifications中,我想让应用程序在应用程序的导航控制器中显示一个特定的视图控制器(恰好是根视图控制器)。实现这一目标的最佳方法是什么?我可以在应用程序委托中获得对导航控制器的引用吗?

编辑:以下是我正在尝试使用的代码。它似乎使用了正确的导航控制器,但它根本不显示视图控制器,只是一个空白屏幕:

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        EventDetailViewController *destCon = [storyboard instantiateViewControllerWithIdentifier:@"EventDetailViewController"];
        destCon.event=notifyEvent;
        UINavigationController *navController =(UINavigationController *) self.window.rootViewController;
        [navController pushViewController:destCon animated:YES];

以下是我所看到的:

enter image description here

2 个答案:

答案 0 :(得分:49)

如果导航控制器是窗口的根视图控制器,则可以使用

(UINavigationController *)self.window.rootViewController
从app委托访问您在故事板中创建的那个。

答案 1 :(得分:10)

我使用下面的内容对我有用,尝试修改你的用法

Stoaryboard是您的故事板的名称,当您收到通知时,您可以调用您的rootview LoginViewController

确保界面构建器中的viewcontroller在以下示例中设置为yourControllerName,例如LoginView

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{

        //replace and push rootview manually
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
        LoginViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
        UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:ivc];
        self.window.rootViewController =nil;
        self.window.rootViewController = navigationController;
        [self.window makeKeyAndVisible];
}