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

Jam*_*rpe 13 uinavigationcontroller push-notification uiapplicationdelegate pushviewcontroller ios

我有一个接收推送通知的应用程序.在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];
Run Code Online (Sandbox Code Playgroud)

这是我所看到的:

在此输入图像描述

rde*_*mar 50

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

(UINavigationController *)self.window.rootViewController
Run Code Online (Sandbox Code Playgroud)

从应用程序委托访问您在故事板中创建的那个.

  • how is this in swift? (2认同)

u.g*_*gen 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];
}
Run Code Online (Sandbox Code Playgroud)

  • 这将创建一个新的导航控制器.我想使用屏幕上当前的现有导航控制器.这样,用户可以按下后退按钮并返回到原来的位置. (2认同)