【问题标题】:How to load an XIB?如何加载 XIB?
【发布时间】:2010-11-29 17:04:24
【问题描述】:

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

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

【问题讨论】:

    标签: iphone sdk xib


    【解决方案1】:

    NSBundle 加载NibNamed:

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 我不知道 XIB 会像这样自动加载。谢谢!
      【解决方案3】:

      使用 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
      

      【讨论】:

      • 他特别说他有两个视图控制器,“MainViewController 和 AboutViewController”不是一个视图控制器和一个视图。
      • 正确。我特别说他可能不需要他们两个来实现他的既定目标。
      • 这似乎是显而易见的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2013-09-30
      • 2011-12-10
      • 2014-12-11
      相关资源
      最近更新 更多