¿Los controles de la vista nesteds de iOS se ven dentro de la vista de UIViewController?

¿Es típicamente mala práctica de progtwigción en iOS tener una vista del controller de vista anidada dentro de la vista de UIViewController? Digamos, por ejemplo, que quería tener algún tipo de elemento interactivo que responda a los toques del usuario, pero solo ocupa el 25% de la pantalla.

Supongo que agregaría este controller de vista nested a mi UIViewController diciendo algo como:

[self.view addSubview: nestedViewController.view]; 

No, este es generalmente un buen layout, ayuda a mantener concisos a los controlleres de vista. Sin embargo, debería usar el patrón de contención del controller de vista, eche un vistazo a la siguiente documentation.

Implementación de un controller de vista de contenedor

Esto es increíblemente simple de configurar usando Interface Builder con Storyboards también, eche un vistazo a la Vista de Contenedores en la biblioteca de objects.

Aquí hay un ejemplo inventado en un Storyboard. En este ejemplo, tendría 4 controlleres de vista, uno que contiene los 3 contenedores y uno para cada contenedor. Cuando presente el controller más a la izquierda que tiene todos los contenedores, el Storyboard se inicializará e incrustará automáticamente el otro 3. Puede acceder a estos controlleres de vista secundarios a través de la propiedad childViewControllers o hay un método que puede anular prepareForSegue:sender: y capture los controlleres de vista de destino de la segue que se va a llamar. Este también es un buen punto para pasar las properties a los controlleres secundarios de vista, si es necesario.

introduzca la descripción de la imagen aquí

Puse este código en el controller de vista principal. Funciona muy bien para mí.

Obj C

 -(void)viewDidLoad{ [super viewDidLoad]; InnerViewController *innerViewController = [self.storyboard instantiateViewControllerWithIdentifier:INNER_VIEW_CONTROLLER]; [self addChildViewController:innerViewController]; [self.view addSubview:innerViewController.view]; [innerViewController didMoveToParentViewController:self]; } 

Swift :

  let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildViewController"), self.addChildViewController(childViewController) self.view.addSubview(childViewController.view) childViewController.didMove(toParentViewController: self) 

Otra opción es usar IB y poner vista de contenedor. UIViewController aparecerá automáticamente (XCode 9 en este caso): introduzca la descripción de la imagen aquí

Aquí está mi solución Swift 3 basada en desarrolladores Swift En la respuesta de FB

  let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildPageViewController"), self.addChildViewController(childViewController) self.view.addSubview(childViewController.view) childViewController.didMove(toParentViewController: self)