【发布时间】:2010-11-29 17:04:24
【问题描述】:
我有一个带有 2 个屏幕(MainViewController 和 AboutViewController)的应用程序。在用户单击按钮时,我想加载 AboutViewController 屏幕,该屏幕在另一个 XIB 中定义。
看起来很简单,但我今天似乎找不到我的 google-fu。我该如何解决这个问题?
【问题讨论】:
我有一个带有 2 个屏幕(MainViewController 和 AboutViewController)的应用程序。在用户单击按钮时,我想加载 AboutViewController 屏幕,该屏幕在另一个 XIB 中定义。
看起来很简单,但我今天似乎找不到我的 google-fu。我该如何解决这个问题?
【问题讨论】:
NSBundle 加载NibNamed:
【讨论】:
当您调用[AboutViewController init] 时,它应该调用某种形式的[super init],它是[UIViewController init] 的同义词。发生这种情况时,您的视图控制器将自动查找名为(在您的情况下)AboutViewController.xib 的 nib 文件。如果找到该文件,它会为您将其内容加载到您的视图控制器中。
所以基本上,您需要做的就是初始化您的视图控制器,并确保它与关联的 nib 文件具有相同的名称。
如果您想将具有不同名称的 nib 文件加载到视图控制器中,您可以使用您喜欢的任何 nib 文件的名称显式调用 initWithNibName:bundle:。
如果标准初始化(具有同名 nib 文件)不适合您,您可以检查几件事。
UIViewController 子类的init 方法也调用[super init]
UIViewController 子类的 init 方法【讨论】:
使用 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
【讨论】: