Agregar una vista del controller de vista secundaria a una subvista del controller de vista principal

Quiero agregar un tableViewController como un controller de vista secundario de un containerViewController (se muestra a continuación). De acuerdo con la Guía de progtwigción del controller View de Apple, puedo lograr esto con las siguientes líneas de código dentro de mi containerViewController:

[self addChildViewController:tableViewController]; [self.view addSubview:tableViewController.view]; [tableViewController didMoveToParentViewController:self]; 

De hecho, eso funciona bien. Ahora el problema es que no quiero agregar la vista de tableViewController como una subview de la vista raíz de containerViewController. En su lugar, quiero agregarlo como una subvista del contenedorView (ver image), que en sí mismo es una subvista de la vista raíz del contenedorViewController. Entonces cambié el código anterior de la siguiente manera:

  [self addChildViewController:tableViewController]; [self.contentView addSubview:tableViewController.view]; [tableViewController didMoveToParentViewController:self]; 

Ahora, cuando lanzo la aplicación, se bloquea de inmediato con este error:

Terminar la aplicación debido a la exception no detectada 'UIViewControllerHierarchyInconsistency', razón: 'controller de vista secundaria: debe tener el controller de vista principal: pero el principal real es:'

¿Cuál es el problema aquí? ¿No es posible agregar la vista childViewController a una vista secundaria específica de su containerViewController? ¿O cómo puedo lograr esto sin un error en la jerarquía del controller de vista?

containerViewController

Realmente no importa a qué vista está agregando child viewController. Si se agrega una vista de un viewController a otro viewController, debe configurarlo correctamente.

 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]; 

Código fuente

 //class name InfoViewController IBOutlet UIView *addViewToAddPlot; InfoViewController *InfoController; -(void) add_method { InfoController = [[InfoViewController alloc] initWithNibName:@"InfoViewController" bundle:nil]; InfoController.view.frame = self.addViewToAddPlot.bounds; [self containerAddChildViewController:InfoController]; } -(void) remove_method { [self containerRemoveChildViewController : InfoController]; } - (void)containerAddChildViewController:(UIViewController *)childViewController { [self addChildViewController:childViewController]; [self.addViewToAddPlot addSubview:childViewController.view]; [childViewController didMoveToParentViewController:self]; } - (void)containerRemoveChildViewController:(UIViewController *)childViewController { [childViewController willMoveToParentViewController:nil]; [childViewController.view removeFromSuperview]; [childViewController removeFromParentViewController]; } 

Agregar y eliminar viewcontroller, # childviewcontroller

Para mostrar un child_view_controller sobre un main_view_controller.

Paso 1 : crea un main_view_controller en storyboard.

paso 2 : cree un child_view_controller con una UIview y alguna label dentro del storyboard.

paso 3 : en la acción del button main_view_controller agrega el siguiente código:

 - (IBAction)YourButtonAction:(id)sender { ChildViewControllerName *childViewControllerName = [self.storyboard instantiateViewControllerWithIdentifier:@"storyboardIdYouProvided"]; childViewControllerName.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height); [self.view addSubview:childViewControllerName.view]; [childViewControllerName didMoveToParentViewController:self]; }