将子视图控制器的视图添加到父视图控制器的子视图

Mis*_*cha 29 parentviewcontroller addsubview ios childviewcontroller container-view

我想添加一个tableViewController作为containerViewController的子视图控制器(如下所示).根据Apple的View Controller Programming Guide,我可以通过我的containerViewController中的以下代码行实现这一点:

   [self addChildViewController:tableViewController];
   [self.view addSubview:tableViewController.view];
   [tableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

事实上,这很好.现在的问题是我不想将tableViewController的视图添加为containerViewController的根视图的子视图.相反,我想将它添加为containerView的子视图(参见图像),它本身是containerViewController的根视图的子视图.所以我改变了上面的代码如下:

   [self addChildViewController:tableViewController];
   [self.contentView addSubview:tableViewController.view];
   [tableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

现在,当我启动应用程序时,它立即崩溃并出现此错误:

由于未捕获的异常'UIViewControllerHierarchyInconsistency'而终止应用程序,原因:'子视图控制器:应该有父视图控制器:但实际的父级是:'

这里有什么问题?是不是可以将childViewController的视图添加到其containerViewController 的特定视图中?或者如何在视图控制器层次结构中没有错误的情况下实现此目的?

containerViewController

Anu*_*das 49

将viewController添加到哪个视图并不重要.如果将viewController的视图添加到另一个viewController,则需要正确设置它.

tableViewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:tableViewController.view];
/*Calling the addChildViewController: method also calls 
the child’s willMoveToParentViewController: method automatically */
[self addChildViewController:tableViewController];
[tableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

源代码

  • 在Apple文档之后,您不需要自己调用'willMoveToParentViewController:':当您调用'addChildViewController:'时会自动调用它.上面的代码可能导致情况,第一种方法将被调用两次. (7认同)
  • tableViewController.view.frame = self.contentView.bounds +1; (4认同)
  • @Mischa源代码包含在答案中.请检查. (2认同)