如何使用Storyboard在AppDelegate中使用自定义Navigationcontroller

时间:2012-01-08 17:56:37

标签: xcode uinavigationcontroller apple-push-notifications xcode-storyboard

我在AppDelegate中遇到有关Navigationcontroller的问题。我正在使用故事板,如下所示:

Storyboard

使用推送通知后,我的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;加载表视图"。

谢谢你的帮助!

2 个答案:

答案 0 :(得分:8)

UINavigationControllerUIViewController子类,也可以在故事板中为其分配标识符。

使用-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];