How to load a NIB inside of a view in another NIB?

2019-03-15 12:48发布

I have two NIB's

ParentViewController.xib
ChildViewController.xib

ParentViewController.xib contains a UIView and a UIViewController. ChildViewController.xib contains a UIButton

I want ChildViewController.xib to load in the ParentViewController.xib's UIView

I have done the following:

  1. Created @property for UIView in ParentViewController
  2. Connected File's Owner to UIView in ParentViewController
  3. Set UIViewController in ParentViewController's NIB Name property to ChildViewController in Interface Builder
  4. Set ChildViewController view property to UIView in ParentViewController

I was hoping this would load ChildViewController into my UIView in ParentViewController but no luck.

I did get the following warning, which could be the culprit:

'View Controller (Child View)' has both its 'NIB Name' property set and its 'view' outlet connected. This configuration is not supported.

I also have added additional code in ParentViewController's viewDidLoad():

- (void)viewDidLoad {
    [super viewDidLoad];
    ChildViewController *childViewController = [[ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil]; 
    childViewController.view = self.myView; 
}

Any thoughts on why ChildViewController does not load in the UIView of ParentViewController?

2条回答
干净又极端
2楼-- · 2019-03-15 13:01

The alternative is to build the "embedded" view (!) in a Nib, say ChildView.xib, then instantiate it in the ParentViewController.xib (change the class in the Identity inspector). There is no need to programmatically [self.view addSubview:embeddedView] in the parent view controller's -viewDidLoad method.

I wrote up how we embed custom-view Nibs inside other Nibs in a longish blog post. The crux is overriding -awakeAfterUsingCoder: in the ChildView class, replacing the object loaded from the "parent" Nib with the one loaded from the "child" Nib.

Note that our custom controls subclass UIView, not UIViewController (see Apple's docs on Custom view controllers: "You should not use multiple custom view controllers to manage different portions of the same view hierarchy.")

查看更多
3楼-- · 2019-03-15 13:15

Try this

[self.myview addSubview: childViewController.view];

instead of

childViewController.view = self.myView; 
查看更多
登录 后发表回答