我有一个带有导航 Controller 和默认 RootViewController 的程序。如果我不以编程方式执行任何操作,应用程序将启动并且 RootViewController 会按我的预期工作,例如下面的 Storyboard表示的内容:
我遇到的问题是合并可选的启动 ViewController。我想要的是:在我的 AppDelegate (didFinishLaunchingWithOptions) 中,我想要这样的代码:
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"OptionalStartViewController"];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
首先显示可选的 Start ViewController。然后,在用户完成 Optional viewcontroller 之后,他们可以显示 RootViewController。
所以在可选的启动 View Controller 中,我添加了这样的代码来显示 Root View Controller :
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"RootViewController"];
[self appDelegate].window.rootViewController = viewController;
[[self appDelegate].window makeKeyAndVisible];
这一切都有效,除了 RootViewController 在显示时没有预期的导航控件(即显示的 View 没有导航控件)。
我也尝试了下面的代码(使用 UINavigationController 而不是 ViewController),结果相同......
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UINavigationController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];
[self appDelegate].window.rootViewController = viewController;
[[self appDelegate].window makeKeyAndVisible];
另一个转折...可能有几个可选的开始 View Controller 。
有什么想法吗?
最佳答案
- 删除
UINavigationController
- 选择 Controller (在我们的例子中是“可选的启动 View Controller ”)
- 点击
Editor >> Embed In >> Navigation Controller
- 现在选择
Navigation Controller
和 Right Side Utility 区域,选择选项Is Initial View Controller
如果您想动态更改 Root View Controller ,那么最好以编程方式进行,在 didFinishLaunchingWithOptions
中,获取窗口实例,使用 Root View Controller 初始化导航 Controller ,然后设置窗口 Root View Controller 到导航 Controller 。
这是代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
OptionalFirstViewController *optionalFirstViewController = [[OptionalFirstViewController alloc] initWithNibName:@"OptionalFirstViewController" bundle:nil];
UINavigationController *homeNavigationController = [[UINavigationController alloc] initWithRootViewController:optionalFirstViewController];
[optionalFirstViewController release];
self.window.rootViewController = homeNavigationController;
[homeNavigationController release];
[self.window makeKeyAndVisible];
return YES;
}
并确保取消选中 Storyboard中所有 View Controller 的 Is Initial View Controller
希望对你有帮助
关于ios - 以编程方式使用 UINavigationController 设置 RootViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28457732/