2012-01-24 17 views
43

Tengo un problema con el método dismissViewControllerAnimated que no cierra la vista.dismissViewControllerAnimated se llama pero ViewController no se descarta

Lo que está sucediendo en la aplicación aquí es:

  • celular en ItemViewController se selecciona.
  • View es empuje ed a ItemDetailViewController y los detalles se envían a través de un delegado
  • usuario selecciona 'hacer' y el evento se envía a través de un delegado que ser cerrado en ItemViewController

Todo esto funciona, excepto para la vista no se descarta, no hay errores. ¿Alguien puede ver lo que está mal?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller 
{ 
    NSLog(@"Controller: %@", controller); 
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60> 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

¿Qué sucede si envía 'dismissModalViewControllerAnimated:' en su lugar? –

+0

¿Cómo se empuja 'self' en la pantalla? – Nekto

+0

@Vince: lo intenté, pero parece que no funciona si el segue es un "empujón". –

Respuesta

65

¿Qué sucede si llama al [controller.navigationController popViewControllerAnimated:YES] en su lugar?

Por lo demás, ¿qué ocurre si llama al [controller dismissViewControllerAnimated:YES completion:nil] en lugar de llamarlo por su cuenta?

+4

+1 - 'push', so' pop' –

+1

¡Gracias, esto funcionó! Muy apreciado. –

+8

La sintaxis exacta que funcionó para mí: [self.navigationController popViewControllerAnimated: YES]; – Dan

10

La respuesta está en esta página: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController se utiliza cuando usted no tiene un navigationcontroller. Lo más probable es que esté utilizando un controlador de navegación, luego use self.navigationController popViewController en su lugar.

Asimismo, tomamos nota de Lemax su observación: el uso NULL, no nula para el completionhandler

+0

gracias, parece que el nulo es donde estaba mi problema – John

+2

Use NULL para punteros que no sean objetos. Entonces no deberías usar NULL aquí. –

+2

MacTypes.h tiene #define nil NULL ... –

4

que tenía un problema en IOS5, donde la devolución de llamada finalización estándar no estaba permitiendo el fin de descartar por completo (sólo la corriente vista empujado de que modal)

[controller dismissViewControllerAnimated:YES completion:^ { 
    // 
}]; 

Solución para IOS5 es no tener una devolución de llamada:

[controller dismissViewControllerAnimated:YES completion:nil]; 
3

Tuve un problema al llamar al dismissViewControllerAnimated, descartar el teclado en un UIViewController, pero no la vista en sí.

lo resolvió mediante el uso de dos llamadas:

[self dismissViewControllerAnimated:NO completion:nil]; 
[self dismissViewControllerAnimated:YES completion:nil]; 

un solo instante para el teclado, a continuación, uno de animación para el controlador

+0

increíble, intenté todo antes de esto! –

0

su situación es - ItemViewController -> ItemDetailViewController (empujados en navigationController) Self.dismissViewController (..) descarta un controlador de vista que se presenta sobre self (en su caso es ItemViewController). Aquí, no presentó ningún VC sobre sí mismo, sino que empujó un nuevo VC sobre la pila de navegación. Entonces, la forma correcta de descartar ItemDetailViewController sería

self.navigationController.popViewController (true). por favor lea la descripción de descartar ViewController (...) para obtener más claridad.

Cuestiones relacionadas