【问题标题】:Set rootViewController inside a class of UINavigationController在 UINavigationController 类中设置 rootViewController
【发布时间】: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

标签: ios objective-c


【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 2011-11-28
      • 2013-04-19
      • 2016-07-05
      • 1970-01-01
      相关资源
      最近更新 更多