我有一个带有导航 Controller 和默认RootViewController的程序。如果我没有以编程方式执行任何操作,则该应用程序将启动,并且RootViewController会按我的预期运行,例如以下 Storyboard 所指示的内容:
我遇到的问题是通过合并可选的Start ViewController。我想要的是这样:在我的AppDelegate(didFinishLaunchingWithOptions)中,我想要这样的代码:
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"OptionalStartViewController"];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
首先显示Optional Start ViewController。然后,在用户完成了Optional View Controller 的操作后,他们便可以显示RootViewController。
因此,在可选的Start ViewController中,我添加了如下代码来显示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
Editor >> Embed In >> Navigation Controller
Navigation Controller
和Right Side Utility区域,选择选项Is Initial View Controller
如果要动态更改根 View Controller ,则最好以编程方式进行操作,方法是在
didFinishLaunchingWithOptions
中,获取窗口实例,使用根 View Controller 初始化导航 Controller ,然后将Windows根 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/