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

She*_*lam 12 iphone cocoa-touch objective-c interface-builder

我有两个NIB

ParentViewController.xib
ChildViewController.xib
Run Code Online (Sandbox Code Playgroud)

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中将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.
Run Code Online (Sandbox Code Playgroud)

我还在ParentViewController的viewDidLoad()中添加了其他代码:

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

有关为什么ChildViewController没有加载到ParentViewController的UIView中的任何想法?

小智 6

试试这个

[self.myview addSubview: childViewController.view];
Run Code Online (Sandbox Code Playgroud)

代替

childViewController.view = self.myView; 
Run Code Online (Sandbox Code Playgroud)

  • 可以使用Interface Builder来实现吗? (4认同)

Yan*_*yer 5

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

我写了一篇如何在一篇冗长的博客文章中将自定义视图Nib嵌入其他Nib中的方法.关键是-awakeAfterUsingCoder:在ChildView类中重写,将从"父"Nib加载的对象替换为从"child"Nib加载的对象.

请注意,我们的自定义控件子类UIView不是UIViewController(请参阅Apple在自定义视图控制器上的文档:"您不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分.")

  • 链接到您的博客帖是死的顺便说一句. (2认同)