使用导航栏正确启动视图

时间:2014-03-28 17:51:36

标签: ios objective-c navigation initialization appdelegate

我的应用包含导航控制器和视图控制器。我的UI的某些部分在故事板上完成,一些部分是从代码启动的(在viewDidLoad中)。我的目标是在应用程序从推送通知启动时加载childViewController X(由后退按钮,唠叨条,标签和表组成)"正确"通过appDelegate中的这个方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这对你们来说可能是一个简单的问题,但我已经问过几天的几个问题(你可以查看我的问题历史)。尝试了几种方法后,我的应用程序:

崩溃 加载没有导航栏 加载导航栏但没有标签(后退按钮不起作用) 加载导航栏但下面有黑色屏幕 只有tableView被拖到故事板上。推断导航栏但我有代码指示其后退按钮和标题。其余的都是通过.m文件中的代码完成的。

我知道人们之前已经问过这个问题,但没有一种方法有效。如何通过推送通知正确加载这个childViewController?

到目前为止我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *dictionary = [launchOptions     objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (dictionary != nil)
{

UIStoryboard *mainstoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController* firstVC = [mainstoryboard instantiateViewControllerWithIdentifier:@"NotificationsViewController"];
[self.window.rootViewController addChildViewController:firstVC];
[(UINavigationController *)self.window.rootViewController pushViewController:firstVC animated:NO];
self.window.rootViewController.childViewControllers);
}}

错误代码:

'-[SWRevealViewController pushViewController:animated:]: unrecognized selector sent to instance 0x14575f20'

SWRevealViewController是我的侧边栏菜单视图控制器的库。

我也试过这种方法:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *initViewController = [storyboard  instantiateViewControllerWithIdentifier:@"NotificationsViewController"];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initViewController;
[self.window makeKeyAndVisible];

这会加载正确的viewController但没有导航栏。

1 个答案:

答案 0 :(得分:0)

看起来您已将rootViewController设置为SWRevealViewController类型的自定义控制器。如果你想在rootViewController上调用pushViewController:animated:它必须是一个UINavigation控制器。目前,您在不响应该消息的控制器上调用它。

在Storyboard中确保将UINavigationController拖到画布上,并在InterfaceBuilder中移动root-view-controller箭头指向它。然后将所需的任何ViewController加载到navigationController中。 (即你问题顶部的代码应该有效)。