我在AppDelegate中遇到有关Navigationcontroller的问题。我正在使用故事板,如下所示:
使用推送通知后,我的AppDelegate文件中有以下功能:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
//...
}
当通知到达时,我想初始化"详细信息视图" - 需要ID作为参数的控制器。此ID是我的有效负载的一部分,因此它存在于didReceiveRemoteNotification
。
我想接下来:
DetailView *detail = [storyboard instantiateViewControllerWithIdentifier:@"detail"];
detail.conversationID = theID;
[self.navigationController pushViewController:detail animated:YES];
我现在的问题是:我怎样才能获得导航控制器?我已经搜索过像#34; getNavigationControllerByIdentifier"或类似的东西,但一无所获。我无法直接实例化Detail View Controller,因为那里缺少导航栏。
我希望你理解我的意思 - 如果你认为我的方法完全错误,请纠正我; o)
另一个小信息:对我来说,详细视图控制器中的后退按钮返回到表视图并不重要 - 当它通过按钮链接到控制器时它就足够了# 34;加载表视图"。
谢谢你的帮助!
答案 0 :(得分:8)
UINavigationController
是UIViewController
子类,也可以在故事板中为其分配标识符。
使用-instantiateViewControllerWithIdentifier:
创建UINavigationController
及其根视图控制器。您可能需要在代码中实例化所有中间控制器并修改导航控制器的viewControllers
属性以设置适当的导航堆栈。这样,当应用程序启动到详细信息视图时,他们可以找回自己的方式,就好像他们已经通过界面手动推送一样。
答案 1 :(得分:4)
您可以在窗口对象上使用rootViewController
。
UIViewController *rootViewController = self.window.rootViewController;
// You now have in rootViewController the view with your "Hello world" label and go button.
// Get the navigation controller of this view controller with:
UINavigationController *navigationController = rootViewController.navigationController;
// You can now use it to push your next view controller:
DetailViewController *detail = [navigationController.storyboard instantiateViewControllerWithIdentifier:@"detail"];
detail.conversationID = theID;
[navigationController pushViewController:detailViewController animated:YES];