2009-09-19 22 views
11

Tengo una aplicación con 2 pantallas (MainViewController y AboutViewController). Cuando el usuario haga clic en un botón, me gustaría cargar la pantalla AboutViewController, que está definida en otro XIB.Cómo cargar un XIB?

Parece simple, pero parece que hoy no encuentro mi google-fu. ¿Cómo logro esto?

Respuesta

30

Cuando se llama a [AboutViewController init], se espera que llame a algún tipo de [super init], que es sinónimo de [UIViewController init]. Cuando esto sucede, su controlador de vista buscará automáticamente un archivo de punta llamado (en su caso) AboutViewController.xib. Si encuentra ese archivo, carga sus contenidos en su controlador de vista por usted.

Así que, básicamente, todo lo que necesita hacer es inicializar su controlador de vista y asegurarse de que tenga el mismo nombre que el archivo de punta asociado.

Si desea cargar un archivo de punta con un nombre diferente en su controlador de vista, puede llamar explícitamente al initWithNibName:bundle: con el nombre del archivo de punta que desee.

Si el init estándar (con un archivo de punta del mismo nombre) no funciona para usted, hay algunas cosas que puede verificar.

  • la ortografía del nombre de la clase es la misma que la ortografía (y la caja) del archivo semilla
  • el archivo semilla se incluye en el proyecto, y no sólo de estar en el mismo directorio
  • su método init UIViewController de subclase también llamada [super init]
  • que está llamando a su método init UIViewController de subclase
  • que le están haciendo la vista de su controlador de vista visible
+4

No tenía XIBs idea eran automáticamente cargada Me gusta esto. ¡Gracias! – DOOManiac

0

NSBundle loadNibNamed:

11

Con una pantalla Acerca de, probablemente solo quiera mostrar una vista y luego descartarla. Entonces, en lugar de usar un controlador de vista completamente nuevo, puede cubrir la vista actual.

Asumiendo que tienen una Ivar

UIView *aboutUsView; 

con la propiedad adecuada.

En el controlador de vista do:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items 
[self.view addSubview:aboutUsView]; // Retains the view 
[aboutUsView release]; 

Para quitar la vista, por ejemplo en una acción conectada a un botón en la vista, hacer:

[aboutUsView removeFromSuperview], aboutUsView = nil; // Releases the view 
+0

Dijo específicamente que tenía dos controladores de vista, "MainViewController y AboutViewController", no un controlador de vista y una vista. – mahboudz

+5

Correcto. Y dije específicamente que tal vez no los necesita a los dos para alcanzar su objetivo declarado. –

+0

Este parece ser el método obvio. – user1432813

Cuestiones relacionadas