2012-04-23 31 views
7

En la parte superior de una vista existente quiero: a) mostrar una pantalla al usuario b) luego enviar un SMS c) mostrar otra pantalla al usuario.¿Puede un controlador de vista presentado también ser un controlador de vista de presentación?

Para una) que estoy haciendo esto:

[[UIApplication sharedApplication].delegate.window.rootViewController presentViewController: firstController animated: NO completion:nil]; 

y b) que estoy haciendo lo mismo, excepto que esta es la presentación de un VC diferente, por supuesto, un MFMessageComposeViewController.

Sin embargo, a fin de b) para aparecer primero tengo que despedir el primer controlador de vista usando:

[[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:NO completion: nil]; 

que funciona hasta ahora, puedo ver la primera vista Parecería entonces ver el SMS vista de composición aparece. Cuando el SMS se envía Estoy haciendo esto para despedir a la vista de composición de SMS

[[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:NO completion: nil]; 

Pero entonces no pasa nada cuando intento presentar otra pantalla para el usuario mediante presentViewController. No veo ninguna razón por la que debería ser así, ¿hay algo de lo que no tenga conocimiento?

En realidad la pantalla antes de la vista SMS y después de que son los mismos excepto que tienen texto diferente, por lo que la secuencia más sencilla de pasos serían:

a) presentar el controlador de vista con el texto "abc" b) presente el controlador de SMS c) cuando se envía el SMS, desactive el controlador de SMS d) actualice el texto en el primer controlador de vista usando un IBOutlet e) descarte el primer controlador de vista.

Sin embargo, como se mencionó anteriormente, si no descarto el controlador de primera vista, el controlador de SMS no aparecerá. Entonces, mi pregunta principal es ¿cómo puedo presentar el controlador de SMS sobre el primer controlador de vista?

Respuesta

0

iOS no le permite abrir dos vistas modales al mismo tiempo. La vista modal está diseñada para ser la vista superior.

+3

Sin embargo, en iOS 5 (que estoy usando) "modal" es ahora más de una terminología heredada y tenga en cuenta cómo estoy usando presentViewController y no presentModalViewController. ¿Es el caso que un controlador de vista presentado no puede ser un controlador de vista presentador? – Gruntcakes

8

Puede presente uno tras otro se cierra:

UIViewController *rvc = [UIApplication sharedApplication].delegate.window.rootViewController; 
[rvc dismissViewControllerAnimated:NO completion:^{ 
    [rvc presentViewController: secondController animated: NO completion:nil]; 
}]; 

O presentar otra en la parte superior:

UIViewController *rvc = [UIApplication sharedApplication].delegate.window.rootViewController; 
UIViewController *pvc = rvc.presentedViewController; // you may need to loop through presentedViewControllers if you have more than one 
[pvc presentViewController: secondController animated: NO completion:nil]; 
+0

Por encima del segundo método ¿hay algún cambio para la aplicación de rechazo de Appstore ..? – g212gs

+1

¿Por qué le importaría a la aplicación si presenta/descarta controladores de vista? –

+0

Porque normalmente solo podemos presentar un viewController a la vez, Pero puedo lograr lo que quiero usando su técnica. – g212gs

Cuestiones relacionadas