在 UINavigationController 类中设置 rootViewController
Posted
技术标签:
【中文标题】在 UINavigationController 类中设置 rootViewController【英文标题】:Set rootViewController inside a class of UINavigationController 【发布时间】:2016-03-26 02:24:18 【问题描述】:我的故事板中有一个 UINavigationController 和两个执行以下功能的 viewController:
InitialViewController:这将是应用程序的主屏幕。
FirstTimeViewController:是用户打开时出现的屏幕 首次使用该应用。
我的 UINavigationController 有一个包含以下代码的类:
- (void)viewDidLoad
[super viewDidLoad];
if ([[ReadPlist initWithPlist:@"Configuration.plist" key:@"initialConfiguration"] boolValue])
FirstTimeViewController *firstTimeController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"firstTimeView"]; //or the homeController
[self.navigationController pushViewController:firstTimeController animated:NO];
else
InitialViewController *initialController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"initialView"]; //or the homeController
[self.navigationController pushViewController:initialController animated:NO];
基本上这段代码验证 .plist 文件是否某个特定字段处于活动状态,如果是则表示应用程序是第一次运行,在这种情况下它会调用相应的 viewController。
但是这段代码不起作用,我看到一个带有黑色视图的 NavigationController。我要做的就是在界面构建器中做同样的事情,只需从 UIViewController 内的 UINavigationController 拖一条线并设置为“根视图控制器”,但在我的情况下,我正在尝试以编程方式执行此操作。
我该怎么做?
【问题讨论】:
在您当前的实现中,您是 pushViewController,这就是后退按钮可见的原因。更好的设置导航rootViewController 【参考方案1】:当您在控制器 ViewDidload 或您的成功代码中推送到 FirstTimeViewController 设置 Bool(用户默认值)时。然后在您的 AppDelegate 下面的代码中设置。
如果(布尔值 = 是)
FirstTimeViewController *FS=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"FirstTimeViewController"]; UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:FS]; [navController setNavigationBarHidden:YES]; self.window.rootViewController=navController; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible];
【讨论】:
【参考方案2】:我的答案是
- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)options
UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
FirstTimeViewController *firstTimeVC = [navController.storyboard instantiateViewControllerWithIdentifier:@" FirstTimeViewController"];
InitialViewController *initialVC = [navController.storyboard instantiateViewControllerWithIdentifier:@" InitialViewController"];
if ([[ReadPlist initWithPlist:@"Configuration.plist" key:@"initialConfiguration"] boolValue])
// FirstTime
navController.viewControllers = [NSArray arrayWithObject:firstTimeVC];
else
// Initial
navController.viewControllers = [NSArray arrayWithObject:initialVC];
[self.window makeKeyAndVisible];
return YES;
【讨论】:
以上是关于在 UINavigationController 类中设置 rootViewController的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController
(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换
关闭 UINavigationController 并呈现另一个 UINavigationController
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller