11

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

看起来很简单,但我今天似乎找不到我的 google-fu。我该如何解决这个问题?

4

3 回答 3

30

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

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

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

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

  • 类名的拼写与 nib 文件的拼写(和大小写)相同
  • nib 文件包含在项目中,而不仅仅是位于同一目录中
  • 你的UIViewController子类的 init 方法也调用[super init]
  • 你正在调用你的UIViewController子类的 init 方法
  • 你确实让你的视图控制器的视图可见
于 2009-09-19T10:07:10.780 回答
11

使用 About 屏幕,您可能只想显示一个视图,然后将其关闭。因此,与其使用全新的视图控制器,不如只覆盖当前视图。

假设你有一个 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
于 2009-09-20T23:21:08.563 回答
0

NSBundle loadNibNamed:

于 2009-09-19T09:14:53.770 回答