2012-03-07 5 views
9

usando el siguiente código en el padre ViewController, quiero presentar una segunda vista sábana de la primera, y luego despedir a la primera:¿Cómo presentar una segunda ViewController y desestime el primer

// Animates the next questionViewController using the first questionViewController 
[previousView presentViewController:nextQuestionViewController animated:YES completion:nil]; 

// Dismiss the first questionViewController 
[previousView dismissViewControllerAnimated:NO completion:nil]; 

Cuando se ejecuta, el se presenta la segunda vista, pero la primera vista no se descarta.

+0

previousView es un viewController en una pila o control de navegación se visualiza de forma modal? –

+0

Sí, se muestra de forma modal. No puedo entender por qué no descartará. –

+0

Desde su código, solo dice presentViewController: animado, no presenteModalViewController: –

Respuesta

12

Usted tendría que descartar en primer lugar el "previousView" & luego presentar el "nextQuestionViewController":

// Dismiss the first questionViewController 
[previousView dismissViewControllerAnimated:NO completion:nil]; 

// Animates the next questionViewController using the first questionViewController 
[previousView presentViewController:nextQuestionViewController animated:YES completion:nil]; 
+1

Después de esta respuesta se produce la siguiente excepción: 'Aplicación de finalización debido a excepción no detectada 'NSInvalidArgumentException', razón: 'Aplicación intentó presentar modalmente un controlador activo .' ' – Benjamin

+0

¿No cree que será un error? propenso a usar un controlador de vista para presentar otro sabiendo que él mismo será desasignado en algún momento. Prefiero usar '[[UIApplication sharedApplication] .keyWindow.rootViewController' o similar al presente' nextQuestionViewController', como lo sugiere @Mozilla. – atulkhatri

4

tratar

[self dismissViewControllerAnimated:NO completion:nil]; 

defecto:

[self.navigationController popViewControllerAnimated:YES]; 
+0

Estoy tratando de resolver este problema de nuevo - el uso de ambos métodos no descarta el segundo viewController, después de presentar el primero - ¿Me falta algo más? –

+0

Como dice Raphael, debe presentar el segundo viewController de la siguiente manera: [previousView presentModalViewController: nextQuestionViewController animated: YES]; – ader

2

que hice a continuación (auto - es su controlador anterior):

UIStoryboard *storyboard = self.storyboard; 

[self dismissViewControllerAnimated:YES 
         completion:^{ 
     UIViewController *newController = [storyboard instantiateViewControllerWithIdentifier:@"newControllerStoryboardId"]; 
     newController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 

     [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:newController animated:YES completion:nil]; 
    }]; 
-1

Parece que no es posible pasar de B a C sin mostrar A brevemente, lo que parece poco profesional. Sin embargo, se puede poner un subvista negro sobre la parte superior de A hasta que se haya animado a C.

Para el código, véase mi respuesta a https://stackoverflow.com/a/45579371/218226

Cuestiones relacionadas