container ios objective-c iphone uiviewcontroller embed

ios - container - ¿Insertar UIViewController mediante programación?



add viewcontroller to container view programmatically (1)

Tengo una configuración de Storyboard con un UIViewController con una vista de contenedor para que pueda incrustar otro UIViewController en UIViewController interior.

En un caso determinado, necesito cambiar el controlador de vista integrado. En mi guión gráfico no puedo tener dos segmentos de mi vista de contenedor (solo un segmento de inserción). Lo que me lleva a hacerlo programáticamente.

Tengo mi vista de contenedor en mi guión gráfico sin ningún elemento de inserción conectado.

Ahora, desde este punto, ¿cómo puedo incrustar mediante programación el objeto UIViewController elegido?


Puede hacerlo mediante programación, a continuación se muestra el método que tomará un valor bool para decidir qué controlador de vista debe agregarse en la vista de contenedor y luego instanciará un objeto y luego lo agregará a containerView

- (void)addViewControllerToContainerView:(BOOL)addVC1 { // Get storyboard UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"<name of storyboard>" bundle:[NSBundle mainBundle]]; UIViewController *viewController = nil; if (addVC1) { // get viewController with identifier viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 1 Identifier>"]; } else { viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 2 Identifier>"]; } // lets add it to container view [viewController willMoveToParentViewController:self]; [self.view addSubview:viewController.view]; [self addChildViewController:viewController]; [viewController didMoveToParentViewController:self]; // keep reference of viewController which may be useful when you need to remove it from container view, lets consider you have a property name as containerViewController self.containerViewController = viewController; }

Cuando necesite quitar el controlador de vista del controlador de vista de contenedor, puede hacer esto

[self.containerViewController willMoveToParentViewController:nil]; // 1 self.containerViewController.view removeFromSuperView]; [self.containerViewController removeFromParentViewController];//this line is updated as view is removed from parent view cotnroller istead of its viewcontroller is removed from parentViewController self.containerViewController = nil

Apple docs sobre controladores de vista de contenedor