2010-03-21 10 views
6

aquí está mi código:presentModalViewController no trabajar

ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil]; 
[self.navigationController presentModalViewController:vc animated:YES]; 
//[self setView:[vc view]]; 

Si la llamo, no pasa nada. Sin embargo, si la cambio a:

ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil]; 
//[self.navigationController presentModalViewController:vc animated:YES]; 
[self setView:[vc view]]; 

La vista parece muy bien (sin la transición, por supuesto). ¿Qué estoy haciendo mal? ¿Hay algo especial que tengas que tener en cuenta al inicializar el controlador de visualización? Traté de copiar tanto como sea posible de los ejemplos de Apple, pero no puedo hacer que esto funcione ...

¡Gracias por cualquier aporte!

- Ry

Respuesta

24

Sólo puede presentes controladores de vista modal de los controladores que ya han sido mostrados en pantalla (por lo general a través de un UINavigationController o UITabBarController). Intente crear un UINavigationController, presionando viewController en él, y luego presentando su controlador modal. Hay un proyecto inicial en Xcode que muestra cómo crear un flujo basado en UINavigationController si no estás familiarizado con él.

Otra cosa a tener en cuenta: si no ha empujado el controlador de vista a un UINavigationController, la propiedad .navigationController será nula, y el envío de mensajes no tendrá ningún efecto.

+0

Meh. ¿No hay una manera más fácil de hacer esto? Realmente no quiero crear un UINavigationController solo para poder deslizar una vista ... ¡Gracias por su respuesta, sin embargo! – ryyst

+0

No tiene que crear un controlador de navegación para hacer esto, pero lo está haciendo referencia aquí. Si solo tiene un controlador de vista, puede usar IT para presentar un controlador de vista modal (es decir, deshacerse del ".navigationController" si su ejemplo de código anterior. Deberá agregar la vista de viewController a su ventana principal para hacer esto trabajo. –

+4

+1 me salvó la vida ahora ':)' –

1

Me encontré con el mismo problema al intentar mostrar una vista modal sobre otra vista modal. La respuesta de Ben es correcta, y puede ser implementado de esta manera:

@interface FirstView: UIViewController { 

    UIViewController *firstView; 
} 

- (IBAction)showOptionsView:(id)sender; 

@end 

En la clase de vista principal:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    firstView = [[UIViewController alloc]init]; 
    [firstView setView:self.view]; 
    [firstView setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
} 

- (IBAction)showOptionsView:(id)sender { 
    OptionsView *optView = [[OptionsView alloc]initWithNibName:@"OptionsView" bundle:nil]; 

    if(firstView != nil) { 
     [firstView presentModalViewController:optView animated:YES]; 
     [optView release]; 
}