以编程方式创建导航控制器时出现黑屏

时间:2013-06-03 00:30:40

标签: ios objective-c uinavigationcontroller

我正在以编程方式创建一个类似的导航控制器:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.mainMenuViewController = [[MainMenuViewController alloc] init];
    self.window.rootViewController = self.mainMenuViewController;
    UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:self.window.rootViewController];
    [self.window makeKeyAndVisible];
    [[GKHelper sharedInstance] authenticateLocalPlayer];
    return YES;
}

而且,虽然Xcode对此非常满意,但是当我使用此代码启动应用程序时,我会看到黑屏。当我评论它,并且只是在故事板中使用箭头它工作正常但我没有得到导航控制器。我做错了什么?

2 个答案:

答案 0 :(得分:15)

在尝试发送消息之前,您需要创建UIWindow对象。您还需要将导航控制器设置为窗口rootViewController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.mainMenuViewController = [[MainMenuViewController alloc] init];
    UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:self.mainMenuViewController];
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    [[GKHelper sharedInstance] authenticateLocalPlayer];
    return YES;
}

更新

我看到你正试图从使用故事板过渡。您的MainMenuViewController需要以某种方式创建或加载其视图。当您使用故事板时,MainMenuViewController正在从故事板中加载其视图。您有三种选择:

  1. 您可以从故事板中加载MainMenuViewController,以便从故事板加载其视图。在故事板中,为您的MainMenuViewController提供标识符。假设您将标识符设置为MainMenu。然后,您可以从故事板中加载MainMenuViewController,如下所示:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    self.mainMenuViewController = [storyboard instantiateViewControllerWithIdentifier:@"MainMenu"];
    
  2. 您可以创建包含.xib视图的MainMenuViewController文件。如果您将其命名为MainMenuViewController.xibMainMenuViewController将自动使用它(当您未从故事板加载视图控制器时)。

  3. 您可以实施-[MainMenuViewController loadView]来创建视图并将其存储在self.view中。

答案 1 :(得分:0)

它没有显示任何内容,因为没有什么可以显示:)。以编程方式执行此操作时,您必须: 1.实例化导航控制器 2.实例化要放入其中的视图控制器。 3.创建这些对象的数组 4.将阵列添加到导航控制器 5.设置navController以进行查看。

代码段:

    UINavigationController *navContr = [[UINavigationController alloc]init];
    FirstViewController *firstViewContr = [[FirstViewController alloc] init];
    MapViewController *mapContr = [[MapViewController alloc] init];
    NSArray *vcArray = [NSArray arrayWithObjects: mapContr, firstViewContr, nil];
    [navContr setViewControllers:vcArray];
    [self.window setRootViewController:navContr];
    [self.window makeKeyAndVisible];
    return YES;