【发布时间】:2011-02-02 03:00:23
【问题描述】:
我有一个拥有自己的 NIB 的 ViewController。我想将该 NIB 嵌入到另一个主 NIB 中。如何在 Interface Builder 中完成此操作,以及如何在代码中引用它?
【问题讨论】:
标签: iphone objective-c cocoa-touch iphone-sdk-3.0 uiviewcontroller
我有一个拥有自己的 NIB 的 ViewController。我想将该 NIB 嵌入到另一个主 NIB 中。如何在 Interface Builder 中完成此操作,以及如何在代码中引用它?
【问题讨论】:
标签: iphone objective-c cocoa-touch iphone-sdk-3.0 uiviewcontroller
每个 NIB 都有一个所有者,通常是该 NIB 中主视图的控制器。您可以在 Interface Builder 中轻松创建视图控制器的实例。只需拖出一个视图控制器对象并适当地设置 NIB 属性。
问题在于您无法从 Interface Builder 中处理该控制器的视图。您将需要编写代码来添加嵌入式视图控制器的视图作为主视图控制器视图的子视图。您实际如何执行此操作取决于您的应用程序,但在主视图控制器中拥有一个引用嵌入式视图控制器的插座就足够了。
然后,在主视图控制器的viewDidLoad 实现中,添加嵌入式视图控制器的view 作为主视图控制器的view 的子视图。您可能还必须调整嵌入视图的框架以使其适合。
【讨论】:
希恩·阿拉姆,
如果您在 Xcode 中创建一个新的 TabBar 项目,您可以看到如何从 IB 中的现有对象加载外部 NIB。
Tab Bar Controller http://img.skitch.com/20100329-c2533dqft4q584424926fxfidb.preview.jpg您可以通过 (Command-1) 使用 IB 为 viewController 指定 NIB
First View Controller Attributes http://img.skitch.com/20100329-p83bgd8qyieb5h3dg27beinkj3.preview.jpg【讨论】:
Alex 的方法应该可行,但如果我理解正确,您宁愿选择一种无需在主视图控制器的 -viewDidLoad 方法中以编程方式 [self.view addSubview:embeddedView] 的方法。
我在一篇较长的博文中写下了我们如何embed custom-view Nibs inside other Nibs。关键是在您的自定义视图中覆盖-awakeAfterUsingCoder:,将从“主” Nib 加载的对象替换为从“嵌入式” Nib 加载的对象。
请注意,我们的自定义控件是UIView 的子类,而不是UIViewController(请参阅Apple's docs on Custom view controllers:“您不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分。”)
【讨论】: