如何加载XIB?

Ang*_*ker 11 iphone sdk xib

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

看起来很简单,但我今天似乎无法找到我的谷歌.我怎么把它关掉?

Tyl*_*ler 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方法
  • 你确实让你的视图控制器的视图可见

  • 我不知道XIB会像这样自动加载.谢谢! (4认同)

Ste*_*ler 11

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

假设你有一个伊娃

UIView *aboutUsView;
Run Code Online (Sandbox Code Playgroud)

有适当的财产.

在您的视图控制器中执行:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items
[self.view addSubview:aboutUsView];  // Retains the view
[aboutUsView release];
Run Code Online (Sandbox Code Playgroud)

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

[aboutUsView removeFromSuperview], aboutUsView = nil;  // Releases the view
Run Code Online (Sandbox Code Playgroud)

  • 正确.我特别说他可能不需要他们两个来达到他既定的目标. (5认同)