2010-04-07 9 views
11

Tengo dos NIB¿Cómo cargar un NIB dentro de una vista en otro NIB?

ParentViewController.xib 
ChildViewController.xib 

ParentViewController.xib contiene un UIView y una UIViewController. ChildViewController.xib contiene una UIButton

Quiero ChildViewController.xib para cargar en UIView del ParentViewController.xib

he hecho lo siguiente:

  1. Creado @property para UIView en ParentViewController
  2. Propietario de archivo conectado a UIView en ParentViewController
  3. Establezca UIViewController en el NIB de ParentViewController Nombre de la propiedad a ChildViewController en Interface Builder
  4. Conjunto ChildViewController vista de la propiedad de UIView en ParentViewController

Estaba esperando que esto sería cargar ChildViewController en mi UIView en ParentViewController pero no hubo suerte.

me hizo llegar la siguiente advertencia, lo que podría ser el culpable:

'View Controller (Child View)' has both its 'NIB Name' property set and its 'view' outlet connected. This configuration is not supported. 

También he añadido un código adicional en viewDidLoad ParentViewController():

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ChildViewController *childViewController = [[ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil]; 
    childViewController.view = self.myView; 
} 

Alguna idea de por qué ChildViewController no lo hace cargar en la UIView de ParentViewController?

Respuesta

6

Prueba este

[self.myview addSubview: childViewController.view]; 

en lugar de

childViewController.view = self.myView; 
+4

IS es posible hacerlo mediante la interfaz Constructor ? – wezzy

5

La alternativa es la construcción de la vista "incrustado" (!) En una punta, por ejemplo ChildView.xib, a continuación, crear una instancia en el ParentViewController.xib (modificar la clase en el inspector de Identidad). No es necesario programar [self.view addSubview:embeddedView] en el método -viewDidLoad del controlador de vista principal.

Escribí cómo nos embed custom-view Nibs inside other Nibs en una publicación de blog longish. La crux está anulando -awakeAfterUsingCoder: en la clase ChildView, reemplazando el objeto cargado desde la punta "principal" con la cargada desde la punta "hija".

Tenga en cuenta que nuestros controles personalizados subclasifican UIView, no UIViewController (ver Apple's docs on Custom view controllers: "No debe utilizar múltiples controladores de vista personalizada para gestionar diferentes porciones de la misma jerarquía de vistas")

+0

Bueno, verificaste la parte 'Controladores de vista de contenedor acomodan el contenido de otros controladores de vista' desde el enlace que proporcionaste ... desde iOS5 tienes la opción de contención UIViewController. – tapmonkey

+2

El enlace a su publicación de blog está muerto por cierto. – expert

+1

@ruslan: Funciona para mí ... De todos modos, aquí hay una actualización: http: //blog.yangmeyer.de/blog/2012/07/09/an-update-on-nested-nib-loading –

Cuestiones relacionadas