如何在另一个NIB的视图中加载NIB?

时间:2010-04-07 02:09:41

标签: iphone objective-c cocoa-touch interface-builder

我有两个NIB

ParentViewController.xib
ChildViewController.xib

ParentViewController.xib包含一个UIView和一个UIViewController。 ChildViewController.xib包含一个UIButton

我希望ChildViewController.xib加载到ParentViewController.xib的UIView

我做了以下事情:

  1. 在ParentViewController中为UIView创建了@property
  2. 将连接文件的所有者添加到ParentViewController中的UIView
  3. 将ParentViewController的NIB Name属性中的UIViewController设置为Interface Builder中的ChildViewController
  4. 在ParentViewController
  5. 中将ChildViewController视图属性设置为UIView

    我希望这会在ChildViewController中将ChildViewController加载到我的UIView中,但没有运气。

    我确实得到了以下警告,这可能是罪魁祸首:

    '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中加载的任何想法?

2 个答案:

答案 0 :(得分:6)

试试这个

[self.myview addSubview: childViewController.view];

而不是

childViewController.view = self.myView; 

答案 1 :(得分:5)

另一种方法是在Nib中构建“嵌入式”视图(!),比如ChildView.xib,然后在ParentViewController.xib中实例化它(更改Identity检查器中的类)。无需在父视图控制器的[self.view addSubview:embeddedView]方法中以编程方式-viewDidLoad

我在一篇冗长的博客文章中写了我们embed custom-view Nibs inside other Nibs的内容。紧要关系是覆盖-awakeAfterUsingCoder:类中的ChildView,将从“父”Nib加载的对象替换为从“子”Nib加载的对象。

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