如何在另一个NIB的视图中加载NIB?
我有两个NIB的如何在另一个NIB的视图中加载NIB?
ParentViewController.xib
ChildViewController.xib
ParentViewController.xib包含一个UIView和一个UIViewController。 ChildViewController.xib包含一个UIButton
我想
我做了以下ChildViewController.xib在ParentViewController.xib的UIView的加载:在ParentViewController
- 创建@property为的UIView
- 在ParentViewController中连接文件的所有者到UIView
- 在ParentViewController的NIB中设置UIViewController在ParentViewController
我希望这会ChildViewController加载到我在ParentViewController但没有运气UIView的name属性ChildViewController在Interface Builder
我没有得到以下警告,这可能是罪魁祸首:
'View Controller (Child View)' has both its 'NIB Name' property set and its 'view' outlet connected. This configuration is not supported.
我还添加了额外的代码在ParentViewController的viewDidLoad():
- (void)viewDidLoad {
[super viewDidLoad];
ChildViewController *childViewController = [[ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil];
childViewController.view = self.myView;
}
为什么ChildViewController没有任何想法加载在ParentViewController的UIView?
试试这个
[self.myview addSubview: childViewController.view];
代替
childViewController.view = self.myView;
另一种方法是建立在笔尖的 “嵌入式” 视图(!),说ChildView.xib
,然后初始化它在ParentViewController.xib
(变化身份检查器中的类)。不需要在父视图控制器的-viewDidLoad
方法中以编程方式[self.view addSubview:embeddedView]
。
我在一篇长篇博文中写了我们如何embed custom-view Nibs inside other Nibs。关键是在ChildView
类中重写-awakeAfterUsingCoder:
,将从“父”Nib加载的对象替换为从“子”Nib加载的对象。
请注意,我们的自定义控件继承UIView
,不UIViewController
(见Apple's docs on Custom view controllers:“你不应该使用多个自定义视图控制器来管理同一视图层次结构的不同部分”)
是可能使用界面做Builder? – wezzy 2011-03-02 18:22:02