10

我正在以编程方式创建一个导航控制器,如下所示:

- (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 似乎对此非常满意,但当我使用此代码启动我的应用程序时,我却遇到了黑屏。当我将其注释掉并仅使用情节提要中的箭头时,它可以正常工作,但我没有导航控制器。我究竟做错了什么?

4

2 回答 2

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.

于 2013-06-03T01:01:36.973 回答
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;
于 2013-06-03T00:40:48.253 回答