在第二个xib问题上加载viewDidLoad

时间:2012-11-01 19:52:30

标签: iphone xcode sdk

我有两个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”方法不会运行...

为什么?

2 个答案:

答案 0 :(得分:2)

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

这似乎不正确。

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

答案 1 :(得分:1)

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

  • 打开您的项目
  • 在左侧导航面板中选择项目名称
  • 右键单击并选择新文件
  • 选择Objective C Type Class
  • 当您点击它时,它会要求您为其命名
  • 假设您提供了GameViewController
  • 选中“With XIB for Interface”
  • 然后添加文件
  • 现在,在导航面板中,您将看到三个类 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
}