如何在NIB中加载外部视图?

时间:2010-03-29 16:11:19

标签: iphone objective-c cocoa-touch iphone-sdk-3.0 uiviewcontroller

我有一个拥有自己的NIB的ViewController。我想将NIB嵌入另一个主NIB中。如何在Interface Builder中完成此操作以及如何在代码中引用它?

3 个答案:

答案 0 :(得分:2)

Sheehan Alam,

如果您在Xcode中创建一个新的TabBar项目,您可以看到如何从IB中的现有对象加载外部NIB。

Tab Bar Controller http://img.skitch.com/20100329-c2533dqft4q584424926fxfidb.preview.jpg

您可以使用IB via(Command-1)

为viewController指定NIB First View Controller Attributes http://img.skitch.com/20100329-p83bgd8qyieb5h3dg27beinkj3.preview.jpg

答案 1 :(得分:1)

每个NIB都有一个所有者,通常是该NIB中主视图的控制器。您可以在Interface Builder中轻松创建视图控制器的实例。只需拖出一个视图控制器对象并适当地设置NIB属性。

问题是您没有办法从Interface Builder中寻址该控制器的视图。您需要编写代码以将嵌入式视图控制器的视图添加为主视图控制器视图的子视图。实际操作方式与您的应用程序有关,但在主视图控制器中有一个引用嵌入式视图控制器的插座就足够了。

然后,在主视图控制器的viewDidLoad实现中,将嵌入式视图控制器的view添加为主视图控制器view的子视图。您可能还必须调整嵌入视图的框架以使其适合。

答案 2 :(得分:1)

Alex的方法应该有效,但是如果我理解正确,你宁愿选择一种方法,而不必在主视图控制器的[self.view addSubview:embeddedView]方法中以编程方式-viewDidLoad

我在一篇冗长的博客文章中写了我们embed custom-view Nibs inside other Nibs的内容。紧要关键是在自定义视图中覆盖-awakeAfterUsingCoder:,将从“主”Nib加载的对象替换为从“嵌入式”笔尖加载的对象。

请注意,我们的自定义控件是子类UIView,而不是UIViewController(请参阅Apple's docs on Custom view controllers:“您不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分。”)