【发布时间】:2013-12-22 07:13:28
【问题描述】:
我正在使用具有以下结构的故事板开发应用程序:
- TabBarController (2 Tab Bars) - Initial View Controller
o NavigationController1
• RegistrationPage - UIViewController (candidate for rootview)
• DoActivityPage - UIViewController (candidate for rootview)
o NavigationController2
• View Controller 1
当应用程序第一次启动时,我想向用户显示 RegistrationPage,并且在随后的时间里,用户将看到 DoActivityPage。由于这两个页面处于同一级别,因此每个页面都有可能成为根视图控制器。
我正在使用 Storyboard 布局,因此在视觉上我只能将其中一个视图设置为 rootViewController,这不符合我的目的。所以,我知道我必须以编程方式实现这一目标,我在 Google 上尝试了很多,但找不到方法。
我的问题是,如何以编程方式为导航控制器设置根视图控制器(在多个根视图控制器中),记住我正在使用情节提要?
目前,当应用程序在选择第一个选项卡项的情况下启动时,我看到一个黑页。如果我在 AppDelegate.m 中添加以下代码,我会看到页面,但底部和顶部栏是空的:
UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
RegistrationPage *rp = [navController.storyboard instantiateViewControllerWithIdentifier:@"RegistrationPage"];
navController.viewControllers = [NSArray arrayWithObjects: rp, nil];
@Michael 我之前尝试过类似的代码,但问题是因为我使用的是故事板,所以我可以访问 tabBarController 的唯一方法是通过这个:
self.window.rootViewController.tabBarController
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:self.window.rootViewController.tabBarController];
而且,当我尝试使用上面的代码时,我得到了一个错误 应用程序试图在目标上推送一个 nil 视图控制器
【问题讨论】:
-
参考这个链接,可能对你有帮助stackoverflow.com/questions/14246454/…
-
此链接与我的问题无关,因为当使用 prepareForSegue 方法单击按钮时,我可以轻松控制不同的视图。但是,就我而言,没有按钮。只是根视图在应用启动时发生变化
标签: ios iphone objective-c xcode tabbarcontroller