使用导航控制器时将视图控制器初始化为初始视图控制器?[Objective-C]

时间:2016-08-14 17:51:43

标签: ios objective-c iphone

我尝试使用导航视图控制器并使用故事板将我的屏幕设置为初始视图控制器并且运行良好。

但是当我在appDelegate.m文件中以编程方式执行所有操作时:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName: @"Main" bundle:nil];

    FirstViewController *firstVC = [storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];


    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: firstVC];


    self.window =[[[UIApplication sharedApplication]delegate] window];

    self.window.rootViewController = navController;

    return YES;
}
  • 我在模拟器上的屏幕是空白的。

  • 但是当我在故事板中检查is initial view controller各个视图控制器并运行时。这次,它工作,并显示预期的屏幕。

我的问题是,当我以编程方式执行所有操作时,为什么要检查故事板中的is initial view controller

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您要在didFinishLaunchingWithOptions中自己创建第一个视图控制器,则还必须实例化UIWindow。但是你对self.window的分配只是检索自己(lol)并且什么都不做。你通常会这样做:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

使用“初始视图控制器”选项时,它会为您完成所有这些操作,这就是检查该选项时的原因。

不要忘记makeKeyAndVisible

[self.window makeKeyAndVisible];

因此:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *firstVC = [storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: firstVC];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = navController;
    [self.window makeKeyAndVisible];

    return YES;
}