【问题标题】:How do I use nibs/xibs alongside Storyboards?如何在 Storyboards 旁边使用 nibs/xibs?
【发布时间】:2014-03-09 22:56:12
【问题描述】:

我听到很多人说他们使用 Storyboard 进行布局,但出于创建可重用视图和其他原因,Storyboard 达不到他们的期望,他们选择仍然使用 nib/xib。

在 Storyboard 被接受实践并且 Apple 开始不再谈论 nib 之后进入 iOS 开发领域,我很困惑如何将两者混合在一起,而且似乎缺乏解释这种组合的资源或教程。

如果我想要一个可重用的 UIView,比如嵌入一个 UIImageView 和一个 UIProgressView,我是否要创建 一个 nib 文件,并使用 [NSBundle mainBundle] 导入来引入它?或者我是否像使用故事板一样使用它并有一个包含可重用视图的大 nib 文件,然后清楚地导入视图?

非常感谢您解释如何串联使用它们,甚至只是一个教程链接。我真的很想利用 nib 和 Storyboard 的好处,但我很难理解它。

【问题讨论】:

  • 请注意,您不受情节提要的约束。在我看来,他们在很多方面只是混淆了这个问题。我有时仍然只使用 xib 文件编写应用程序。但是混搭也不错。你可以有多个故事板和多个 xib....

标签: ios objective-c xib uistoryboard nib


【解决方案1】:

有两种方法可以从 xib 中提取视图。

  • 如果它是视图控制器的主视图,那么当视图控制器的实例需要它的视图时,这或多或少会自动发生(因为它们通过名称或视图控制器的方式关联实例化)。

  • 否则,请执行以下操作:让视图成为其 xib 中的唯一顶级对象,然后加载 xib 并获取该唯一顶级对象,如下所示:

    NSArray* objects = [[UINib nibWithNibName:@"SomeName" bundle:nil]
                        instantiateWithOwner:nil options:nil];
    UIView* v = objects[0];
    

    现在您可以将新实例化的视图插入您的界面。正如你所说的那样,你可以一遍又一遍地这样做以获得更多实例。

注意:第三种方法是加载 xib 的所有者,该所有者具有视图的出口,但要解释这需要比我想在这里更多的细节,它可能不会为您提供任何您需要的东西目前。

【讨论】:

  • 在我看来,正如你所期望的那样,最好的解释是我的书。我的书当前版本的“基础”卷有一个非常强大的 nib 管理章节,它讨论了 xib 和故事板如何并存(正如你所说,在这个时代,无论你喜欢与否)。或者你可以阅读previous edition online;你特别想要第 7 章和第 19 章。
  • 谢谢,我喜欢阅读你的书。那么,拥有 5 个具有不同视图的 nib 文件是否没有问题?
  • 绝对没有!这是一件完全合理的事情。 nib 只不过是一种对用于实例化和初始化所包含对象的指令进行编码的方式。你不介意在代码中制作对象,那么为什么要介意通过加载 nib 来制作对象呢?也许加载一个笔尖需要一点时间(尤其是第一次加载它时),当然它会在你的包中占用一点空间,但我认为这不是很大的缺点。
猜你喜欢
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2014-04-27
  • 2012-02-11
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多