¿Cómo get una notificación cuando ha desaparecido una hoja de formulario (UIModalPresentationFormSheet)?

Tengo un controller de vista (A) que presenta otro controller de vista (B) de manera modal como una hoja de formulario (UIModalPresentationFormSheet).

Ahora quiero descartar ver el controller B y presentar otro tan pronto como sea seguro hacerlo (porque no se puede usar presentModalViewController: mientras se muestra o se descarta otro controller de vista).

Sin embargo, no puedo encontrar ninguna forma de ser notificado cuando la hoja de formulario ha desaparecido por completo. ¿Alguna solución?

Como sin duda usted ha notado, los methods antiguos de viewDidAppear no se UIModalPresentationFormSheet cuando se UIModalPresentationFormSheet controller UIModalPresentationFormSheet . Uno puede emular la llamada viewWillAppear simplemente llamando a ese método cuando descarta el controller, pero eso no es lo que necesita.

En lugar de presentar un segundo controller de vista modal, ¿puede empujar su nuevo controller de vista al controller de navigation del controller de vista modal existente? Esto puede dar una mejor experiencia de usuario de todos modos.

¿O puedes usar un popover?

Entonces, esto es lo que hicimos.

Dado que el controller de vista que controla la hoja de formulario (B) obtiene -viewDidDisappear , simplemente agregamos el controller de vista de presentación (A) como delegado, que luego notificamos a mano cuando -viewDidDisappear recibe una llamada en el controller de vista (B).

La definición de delegado se ve así:

 @protocol FormSheetViewControllerDelegate
 - (vacío) formSheetViewDidDisappear;
 @fin

Agregamos un delegado al FormSheetViewController:

 @interface FormSheetViewController

 @property (nonatomic, assign) id <FormSheetViewControllerDelegate>

 @fin

Y llamamos -formSheetViewDidDisappear desde el FormSheetViewController:

 @implementation FormSheetViewController

 - (void) viewDidDisappear: (BOOL) animated {
     [registerViewControllerDelegate registerViewControllerDidDisappear];
 }

 @fin

PS: desde iOS 5 y bloques, UIViewController tiene el método

  - (void) dismissViewControllerAnimated: finalización de la bandera (BOOL): (void (^) (void)) finalización 

Lo que podría usar para reactjsr al rechazo de la vista de hoja de formulario.