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