2009-09-19 272 views
11

我有一个2屏幕(MainViewController和AboutViewController)的应用程序。当用户点击一个按钮时,我想加载在另一个XIB中定义的AboutViewController屏幕。如何加载XIB?

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

回答

30

当你调用[AboutViewController init],它的预期调用某种形式的[super init],这是[UIViewController init]的代名词。发生这种情况时,视图控制器会自动寻找名为(在你的情况下)AboutViewController.xib的nib文件。如果它找到该文件,它会将它的内容加载到您的视图控制器中。因此,基本上,您只需要初始化视图控制器,并确保其与关联的nib文件具有相同的名称。

如果您想在您的视图控制器中加载具有不同名称的笔尖文件,您可以明确地调用initWithNibName:bundle:,并选择您喜欢的任何一个nib文件的名称。

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

  • 类名的拼写相同
  • 笔尖文件包含在项目中的笔尖文件的拼写(和案件),而不是仅仅坐在同一目录
  • UIViewController子类的init方法并还呼吁[super init]
  • 您所呼叫的UIViewController子类的init方法
  • 你确实使您的视图控制器的视图中可见
+4

我不知道XIBs是自动加载喜欢这个。谢谢! – DOOManiac 2011-08-09 04:01:12

0

一个NSBundle loadNibNamed:

11

With a About屏幕,您可能只想显示一个视图然后关闭它。因此,而不是使用全新的视图控制器,您可以覆盖当前的视图。

假设你有伊娃

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 
+0

他特别说他有两个视图控制器,“MainViewController和AboutViewController”不是视图控制器和视图。 – mahboudz 2009-09-21 03:26:47

+5

正确。我特别说过,他可能不需要他们两人来达到他所说的目标。 – 2009-09-24 03:56:23

+0

这似乎是明显的方法。 – user1432813 2012-07-19 14:43:41