2010-02-03 10 views
16

He creado una aplicación con una vista modal que puedo mostrar y luego descartar. ¿Hay alguna manera fácil de saber cuándo se ha eliminado la vista modal? Me gustaría volver a cargar los datos en una tabla una vez que se haya descartado la vista modal y no sé cuál es la mejor manera de hacerlo.Método para cuando se ha eliminado la vista modal

Gracias

Respuesta

21

UIViewController tiene una propiedad llamada parentViewController. En el caso de que un controlador de vista se presente de forma modal, la propiedad parentViewController apunta al controlador de vista que presentó el controlador de vista modal.

En su controlador de vista modal, en viewWillDisappear: puede enviar un mensaje al parentViewController para realizar cualquier acción que desee, esencialmente.

Algo así como:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self.parentViewController doSomething]; 
} 

Si el controlador de vista de los padres es un controlador de vista de tabla, entonces debería ser capaz de llamar a [self.parentViewController.tableView reloadData]; para hacer lo que estamos tratando de lograr.

+0

Muchas gracias por la rápida respuesta Jasarien, que dará una oportunidad un poco más tarde. – Jack

+2

¿Por qué obtuve un voto negativo para esta respuesta? – Jasarien

+0

No de mi usted no lo hizo – Jack

24

La forma recomendada de hacer esto sería utilizar un delegado de su controlador de vista modal de nuevo al controlador de vista que abrió la vista. Consulte los documentos oficiales para ver ejemplos.

La razón por la que esta es la manera recomendada es para que el ViewController que originalmente inició el modal también tenga el control de descartarlo.

¡Es realmente simple de hacer y pensar más elegante que usar viewWillDisappear, ya que hay otras razones por las que la vista podría desaparecer!

crear un protocolo en su modal ViewController - xViewControllerDelegate

@protocol xViewControllerDelegate 

    - (void) modalDialogFinished; 

@end 

luego hacer su padre implementar el delegado utilizando el <xViewControllerDelegate> cuando se define el controlador de vista padre.

que se verá obligado a tener un método llamado modalDialogFinished en su controlador de vista de los padres - que puede manejar desestimar el mando y el refresco etc.

Recuerde que pasar un id<xViewControllerDelegate> en el controlador de vista modal en su código de inicio y almacenar como un campo en el objeto.

Cuando desee desestimar su vista modal, solo tiene que hacer referencia al delegate.modalDialogFinished.

Si esto no tiene sentido, entonces puedo indicarle un mejor código de ejemplo, pero espero que el uso de delegados no sea nuevo para usted.

ACTUALIZACIÓN ::

Aquí es la documentación oficial de Apple sobre cómo hacer esto por un controlador de vista modal:

http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

+0

Esta debería ser la mejor respuesta –

Cuestiones relacionadas