2010-04-07 79 views
11

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

ParentViewController.xib 
ChildViewController.xib 

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

我想

我做了以下ChildViewController.xib在ParentViewController.xib的UIView的加载:在ParentViewController

  1. 创建@property为的UIView
  2. 在ParentViewController中连接文件的所有者到UIView
  3. 在ParentViewController的NIB中设置UIViewController在ParentViewController

我希望这会ChildViewController加载到我在ParentViewController但没有运气UIView的name属性ChildViewController在Interface Builder

  • 集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?

  • 回答

    6

    试试这个

    [self.myview addSubview: childViewController.view]; 
    

    代替

    childViewController.view = self.myView; 
    
    +4

    是可能使用界面做Builder? – wezzy 2011-03-02 18:22:02

    5

    另一种方法是建立在笔尖的 “嵌入式” 视图(!),说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:“你不应该使用多个自定义视图控制器来管理同一视图层次结构的不同部分”)

    +0

    您是否从您提供的链接中检查了“容器视图控制器排列其他视图控制器的内容”部分...从iOS5起,您可以选择UIViewController遏制。 – tapmonkey 2012-12-06 09:14:02

    +2

    链接到您的博文是死的顺便说一句。 – expert 2013-08-30 01:18:47

    +1

    @ruslan:适用于我......无论如何,这里是一个更新:http://blog.yangmeyer。de/blog/2012/07/09/an-update-on-nested-nib-loading – 2013-08-30 09:35:48