0

我有两个 xib 文件。我从“ViewController.xib”开始,当用户单击一个按钮时,它会加载一个名为“GamePage.xib”的不同 xib 文件。

按钮的代码是:

-(IBAction)startButtonClicked{    
    UIViewController *gamePage = [[UIViewController alloc] initWithNibName:@"GamePage" bundle:nil];
    [self presentViewController:gamePage animated:NO completion:nil];
}

单击按钮时,屏幕上会显示第二个 xib,但它的“viewDidLoad”方法没有运行……</p>

这是为什么?

4

2 回答 2

2
UIViewController *gamePage = [[UIViewController alloc] initWithNibName:@"GamePage" bundle:nil];

这似乎不正确。

viewDidLoad可能正在运行,但它是viewDidLoadApple 的UIViewController. 您应该使用您的类而不是UIViewController在初始化它时。通常,您应该使用需要调用的 viewDidLoad 类。

于 2012-11-01T20:17:22.863 回答
1

您的 XIB 必须有其所有者。您需要创建一个从 UIViewController 派生的类,然后您需要使该类成为您的 XIB 的所有者。只需按照以下步骤操作:

  • 打开你的项目
  • 在左侧导航面板中选择项目名称
  • 右键单击并选择新建文件
  • 选择Objective C Type Class
  • 当你点击它时,它会要求你给它一个名字
  • 假设你给了 GameViewController
  • 检查“使用XIB作为接口”
  • 然后添加文件
  • 现在在您的导航面板中,您将看到三个类 GameViewController.h GameViewController.m GameViewController.xib 在您的 xib 中创建您的界面。

现在,如果您必须移动到此类并显示其视图,请编写以下代码:

 -(IBAction)startButtonClicked{    
    GameViewController *gamePage = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil];
    [[self navigationController] pushVIewController:gamePage animated:YES];
    [gamePage release]; //If not used ARC
}
于 2012-11-01T20:32:39.373 回答