Swift: Pasar valor a un ViewController previamente instanciado y presentado.

Hace unos días me encontré con un problema cuando desarrollaba una aplicación para dispositivos IOS en Swift (el lenguaje de programación más nuevo de Apple). El problema era el siguiente, tenía que refrescar una TableView que se encontraba en un ViewController pero solo cuando se modificaran datos de alguno de los objetos que mostraba la tabla y cuando se llamara a la función “popToViewController” del navigationController ya que no quería alterar la pila de controladores instanciados para que cuando el usuario apretara el “BackButton” del controlador navegara de manera natural en el mismo orden de apertura/navegación. La situación no es muy compleja y seguro que hay muchas más formas de hacerlo y mejores que la que os voy a explicar.

Lo que hice es que en el momento en el que llamo a popToViewController recojo el controlador que ha llamado a este obteniendo la pila de controladores instanciados hasta el momento y le cambio el valor de una variable definida en este controlador, para a posteriori analizar este valor en la función “viewWillAppear” y si es “True” hacer la petición al servidor y refrescar los datos de la TableView. Entiendo que es un poco lioso así que dejo un ejemplo para que lo veáis.

// Obtenemos los controladores de la pila.
let viewControllers = self.navigationController?.viewControllers

 // Buscamos el controlador al que queremos volver.
 for vc in viewControllers! {

        if vc is ListaReservasViewController {
                // Hacemos un cast del controlador encontrado a su tipo clase.
                let viewController = vc as! ListaReservasViewController
                // Modificamos la variable definida en el controlador.
                viewController.refresh = true
                // Redirigimos al controlador y en el viewWillAppear analizamos la variable para ver si refrescamos los datos o no.
                self.navigationController?.popToViewController(viewController, animated: true)
        }
}

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s