如何加载XIB?

时间:2009-09-19 09:09:00

标签: iphone sdk xib

我有一个带2个屏幕的应用程序(MainViewController和AboutViewController)。在用户单击按钮后,我想加载AboutViewController屏幕,该屏幕在另一个XIB中定义。

看起来很简单,但我今天似乎无法找到我的谷歌。我该怎么做呢?

3 个答案:

答案 0 :(得分:30)

当您致电[AboutViewController init]时,预计会调用某种形式的[super init],这是[UIViewController init]的同义词。发生这种情况时,视图控制器将自动查找名为(在您的情况下)AboutViewController.xib的nib文件。如果找到该文件,则会将其内容加载到视图控制器中。

基本上,您需要做的就是初始化视图控制器,并确保它与关联的nib文件具有相同的名称。

如果要将具有不同名称的nib文件加载到视图控制器中,可以使用您喜欢的任何nib文件的名称显式调用initWithNibName:bundle:

如果标准init(使用同名nib文件)不适合您,您可以检查几件事。

  • 类名的拼写与nib文件的拼写(和大小写)相同
  • nib文件包含在项目中,而不只是位于同一目录中
  • 您的UIViewController子类的init方法也会调用[super init]
  • 您正在调用UIViewController子类的init方法
  • 您确实可以看到视图控制器的视图

答案 1 :(得分:11)

使用“关于”屏幕,您可能只想显示视图然后将其关闭。因此,您可以只使用当前视图,而不是使用全新的视图控制器。

假设你有一个ivar

UIView *aboutUsView;

具有适当的属性。

在视图控制器中执行:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items
[self.view addSubview:aboutUsView];  // Retains the view
[aboutUsView release];

要删除视图,请在连接到视图上按钮的操作中执行:

[aboutUsView removeFromSuperview], aboutUsView = nil;  // Releases the view

答案 2 :(得分:0)

NSBundle loadNibNamed: