2012-10-11 66 views
5

Estoy intentando hacer que funcione una operación simple. Al menos parece simple. Ok, lo que me gustaría hacer es presionar una vista (con el controlador de vista de inserción) desde una vista que se ha insertado con el controlador de vista modal.Controlador de vista push en la vista del controlador de vista modal

View1 - (presione usando el controlador de vista modal) -> View2 - (presione usando el controlador push view) - View3.

Rigth ahora, estoy haciendo pruebas, así que estoy usando un botón para comenzar la acción. Aquí está el código que utilizo para empujar desde Vista2 para ver 3:

//view2.h 
UIToolbar *bar; 
UIBarButtonItem *button; 
UIToolbar *toolbar; 

} 

- (IBAction)demissModal:(id)sender; 
- (IBAction)goView3:(id)sender; 

@end 

//view2.m 
- (IBAction)goView3:(id)sender{ 

View3 *view_3 = [[View3 alloc] initWithNibName:@"View3" bundle:nil]; 
[self.navigationController pushViewController:view_3 animated:YES]; 

} 

Este es el mismo código que utilizo para empujar a View1 Vista2, y funciona. Pero al presionar View2 a View3, no está funcionando. ¿Alguna idea de por qué sucede eso? ¡Gracias!

+0

necesita presionar el controlador de vista en el controlador activo. Vea si esto funciona [self pushViewController: view_3 animated: YES]; –

Respuesta

11

Ver Los controladores no son en realidad controladores de vista "modales" o "push". Modal o Push describen una transición entre los controladores de vista (llamados segues si estás usando storyboards).

Lo que creo que se está preguntando es cómo presentar modalmente un controlador de vista, y luego presionar otro controlador. El truco está en la presentación modal del controlador de visualización n. ° 1, para presentar realmente un controlador de navegación con su controlador de vista raíz configurado como controlador de vista n. ° 1.

MyViewController *myViewController = [MyViewController alloc] init]; 
UINavigationController *navController = [UINavigationController alloc] initWithRootViewController:myViewController]; 

// Presuming a view controller is asking for the modal transition in the first place. 
[self presentViewController:navController animated:YES completion:nil]; 
// Now in myViewController, call [self.navigationController pushViewController:secondViewController animated:YES]; 

Esto es lo que parece que utilizan guiones gráficos: enter image description here

+0

Ok, esto está funcionando pero no muy bien. Cuando la segunda vista se muestra con la transición modal, entonces vi el botón que debe presionarse para cambiar a View3. Si presiono el botón una vez, muestra la misma vista con transición modal, y si presiono otra vista, muestra lo mismo con una transición extraña. No sé por qué sucede eso. – joan2404

+0

¿Qué código se está ejecutando cuando presiona el botón que debería causar la inserción? Debería ser algo así como '[self.navigationController pushViewController: <# UIViewController #> animado: SÍ]; ' – MaxGabriel

+0

Aquí está el código que estoy usando: Ver * myViewController = [[View2 alloc] init]; View3 * descripcio = [[View3 alloc] init]; UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: View2]; [self presentViewController: navController animated: YES completion: nil]; [self.navigationController pushViewController: View3 animated: YES]; – joan2404

0

Prueba esto:

[self.navigationController pushViewController:view_3 animated:YES]; 
0

En primer lugar, no estoy seguro de que cuando gegant_se está viniendo.

En segundo lugar, si está presionando view2 desde view1 de la misma manera que está empujando view3 desde view2, no está utilizando un modal.

Siempre que utilice un controlador de navegación para empujar un controlador de vista, ese controlador de vista que acaba de ser empujado tiene una referencia al controlador de navegación, a través de la propiedad navigationController. Pruebe esto:

[self.navigationController pushViewController:view_3 animated:YES]; 
+0

Lo siento por eso gegant_se. Fue solo una prueba y me olvidé de cambiarlo. – joan2404

0

tratar este código es AlarmList nombre de la vista.

AlarmListScreen * loscr = [[AlarmListScreen alloc] initWithNibName: nil bundle: nil];

[self.navigationController pushViewController: loscr animated: YES];

[loscr release]; 
Cuestiones relacionadas