Considere tres controladores diferentes A, B y C donde A es el controlador inicial en el controlador de navegación.

Ahora empujo hacia B y luego hacia C.

A --> B --> C

Luego quiero ir de C a A. ¿Cómo puedo ir allí con un solo empujón y animación? Supongo que la forma sería encontrar el controlador A de la pila de navegación y llamar al método popToController. Avísame si hay alguna otra manera mejor.

Ahora la pregunta principal es cómo puedo pasar los datos de C --> A. Si es de B --> A, podría usar la delegación. Pero para C --> A, ¿qué se podría hacer para usar la delegación?

Tengo una solución alternativa mediante el uso de patrones reactivos de observador, singleton. Pero me gustaría saber si se puede utilizar alguna forma mejor.

1
Parth Adroja 22 feb. 2018 a las 12:25

2 respuestas

La mejor respuesta

Puede tener varias formas de lograr esta funcionalidad. Una vez puede obtener su VC de la lista y acceder a él.

let viewControllers: [UIViewController] = self.navigationController!.viewControllers ;
    for aViewController in viewControllers {
        if let controllerA =  aViewController as? AViewController) {
           controllerA.data = self.data               
           self.navigationController?.popToViewController(controllerA, animated: true);
        }
    }

También podría estar interesado en relajarse segue. Aquí también hay un buen ejemplo.

1
CZ54 22 feb. 2018 a las 10:35

Para pasar datos de C -> A use un patrón singleton. cualquier dato que desee pasar, guardar en variable usando un patrón singleton y luego usar

 self.navigationController?.popToRootViewController(animated: true)

Y ahora puedes acceder a los datos donde quieras. espero su ayuda

-2
Asim Ifitkhar Abbasi 22 feb. 2018 a las 09:46