¿Cómo enviar un mensaje a un parentViewController que es una subclase de UIViewController?

Tengo un UIViewController (MyViewController) y otro controlador de vista que estoy presentando modalmente a través de MyViewController (llámelo SecondViewController). Quiero poder enviar un mensaje a MyViewController desde SecondViewController usando

[self.parentViewController hideSecondViewController];

Pero dado que parentViewController se define como UIViewController, y hideSecondViewController no es un método de UIViewController, recibo una advertencia que dice "UIViewController puede no responder a 'hideSecondViewController'". Funciona bien, porque PUEDE enviar el mensaje correctamente durante el programa, pero como #importo SecondViewController en MyViewController, no puedo #importar MyViewController en SecondViewController. ¿Alguna forma de evitar esto?

preguntado el 16 de mayo de 11 a las 16:05

2 Respuestas

Cuando llega el momento de descartar un controlador de vista modal, el enfoque preferido es dejar que el controlador de vista principal haga el cierre. En otras palabras, el mismo controlador de vista que presentó el controlador de vista modal también debería asumir la responsabilidad de descartarlo siempre que sea posible. Aunque existen varias técnicas para notificar a un controlador de vista padre que debe descartar su hijo presentado modalmente, la técnica preferida es delegación.

En un modelo basado en delegados, el controlador de vista que se presenta modalmente debe definir un protocolo para que su delegado lo implemente. El protocolo define métodos que son llamados por el controlador de vista modal en respuesta a acciones específicas, como toques en un botón Listo. El delegado es entonces responsable de implementar estos métodos y proporcionar una respuesta adecuada. En el caso de un controlador de vista padre que actúa como delegado de su hijo modal, la respuesta incluiría descartar el controlador de vista hijo cuando sea apropiado.

Ver más en el Ver la guía de programación del controlador para iOS.


PS:

ya que #importo SecondViewController en MyViewController, no puedo #importar MyViewController en SecondViewController.

Para resolver un problema de dependencia circular, puede utilizar un declaración anticipada.

contestado el 16 de mayo de 11 a las 21:05

Sería mejor rediseñar su arquitectura como propuso albertamg, pero esto debería funcionar:

[autodespedidoModalViewControllerAnimated: SÍ];

puede llamar descartar tanto en la presentación como en el controlador de vista presentado y hará lo mismo.

contestado el 16 de mayo de 11 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.