Cargando un file nib dentro de un UIViewController

Estoy experimentando cómo cargar files nib a un UIViewController .

He creado un file de nib separado llamado Correo electrónico . Primero noté que cuando se carga el controller de vista, no se initWithNibName el initWithNibName método initWithNibName . Entonces lo llamé manualmente desde el método viewDidLoad ,

 [self initWithNibName:@"Email" bundle:[NSBundle mainBundle]]; 

No funcionó. También recibí una advertencia que decía que el resultado de la expresión no se usaba .

Y busqué en Internet y encontré este artículo e implementé el método loadView tal como se describe así,

 - (void)loadView { [super loadView]; UINib *nib = [UINib nibWithNibName:@"Email" bundle:nil]; [nib instantiateWithOwner:self options:nil]; } 

¡Se llama al método, pero aún el controller de vista está vacío!

¿Alguien puede decirme qué estoy pasando por alto aquí y cómo se puede hacer esto?

Gracias.

ACTUALIZAR:

En primer lugar, gracias por todas las respuestas. Sin embargo, las respuestas de voromax y svena sugieren que debería eliminar los segues y cargar plumillas automáticamente, de las que no me gustan mucho. La respuesta de Anil funciona y ahora tengo un último obstáculo para saltar.

Tengo varios files de punta. Dependiendo de la selección del usuario, debe cargar una punta específica. Entonces, lo que intenté fue poner todas las nibs dentro de la matriz como tal,

 - (void)loadView { [super loadView]; NSArray *nibs = [[NSArray alloc] initWithObjects: [[NSBundle mainBundle] loadNibNamed:@"Facsimile" owner:self options:nil], [[NSBundle mainBundle] loadNibNamed:@"Email" owner:self options:nil], [[NSBundle mainBundle] loadNibNamed:@"Memorandum" owner:self options:nil], [[NSBundle mainBundle] loadNibNamed:@"ProjectMemo" owner:self options:nil], nil]; self.view = [nibs objectAtIndex:0]; } 

y acceda a él usando su índice como este self.view = [nibs objectAtIndex:1]; . Pero arroja un error * Finalización de la aplicación debido a la exception no detectada 'NSInvalidArgumentException', razón: '- [__ NSArrayM _setViewDelegate:]: selector no reconocido enviado a la instancia 0xd56fd20' *

¿Por qué aparece este error? Si no es posible, estoy abierto a sugerencias.

Gracias de nuevo. Y perdona un poco arrastrando esto un poco.

Use el código siguiente para cargar una vista desde la punta y usarla como la vista del controller de vista

 - (void)loadView { [super loadView]; NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"test" owner:self options:nil]; self.view = [nib objectAtIndex:0]; } 

Editar

Cargue una sola punta de acuerdo con la selección del usuario. Vea cargar una sola punta

  NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"test" owner:self options:nil]; 

Devuelve una matriz de objects. Desde su pregunta actualizada, puedo ver que está almacenando estas matrices en otra matriz. Ahora su matriz de plumillas es una matriz de objects "array".

  self.view = [[nibs objectAtIndex:0]objectAtIndex:0]; 

trabajará.

Pero no es bueno, cargue una sola punta según la elección del usuario

Se supone que no debe cargar una punta para el controller de vista desde los methods de ese controller de vista.

Si desea instanciar un controller de vista desde una punta, lo hace desde fuera del controller de vista, por lo general el controller de vista que lo presenta.

Si está buscando un gancho dentro del controller de vista presentado que ya tenga las conexiones de salida configuradas, anular -awakeFromNib es una opción popular. -viewDidLoad es otra.

Actualización # 1

 - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { if ( /*do your segue identification stuff*/ ) { UIViewController *myViewController = /*init your view controller here*/ UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myViewController]; [self presentViewController:navigationController animated:YES completion:nil]; return NO; } return YES; } 

Debería usar el file nib para crear una instancia del controller de visualización, es decir,

 UIViewController *ctrl = [[UIViewController alloc] initWithNibName:@"Email" bundle:nil]; 

Después de eso puedes presentar este controller

Actualizar

En caso de que necesite seleccionar qué controller de vista debe ser cargado por la lógica de la aplicación, es mejor crear todos los controlleres de vista en un storyboard, omitir el enlace de segue duro y usar el método instancesViewControllerWithIdentifier instantiateViewControllerWithIdentifier: método de su instancia de storyboard para get el controller de vista apropiado y Preséntela manualmente. Supongo que su controller de vista de tabla ya está en el controller de navigation:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath if (APPROPRIATE_INDEX_PATH) { UIViewController *ctrl = [self.storyboard instantiateViewControllerWithIdentifier:IDENTIFIER]; [self.navigationController pushViewController:ctrl animated:YES]; } }