iOS Usando Segues (pasando datos hacia adelante)


Ejemplo

Para pasar los datos del controlador de vista actual al siguiente controlador de vista nuevo (no un controlador de vista anterior) usando segues, primero cree un segmento con un identificador en el guión gráfico relevante. Reemplace el método prepareForSegue su controlador de vista actual. Dentro del método, compruebe el segmento que acaba de crear por su identificador. Convierta el controlador de vista de destino y pase los datos al mismo estableciendo las propiedades en el controlador de vista descendente.

Estableciendo un identificador para un segue:

Inspector de atributos para una segue

Los segmentos se pueden realizar programáticamente o usando el evento de acción de botón establecido en el guión gráfico con ctrl + arrastrar al controlador de vista de destino. Puede solicitar un segue programáticamente, cuando sea necesario, utilizando el identificador de segue en el controlador de vista:

C objetivo

- (void)showDetail {
    [self performSegueWithIdentifier:@"showDetailingSegue" sender:self];        
}

Rápido

func showDetail() {
    self.performSegue(withIdentifier: "showDetailingSegue", sender: self)
}

Puede configurar la carga útil segue en la versión prepareForSegue método prepareForSegue . Puede establecer las propiedades requeridas antes de que se cargue el controlador de vista de destino.

C objetivo

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"showDetailingSegue"]){
        DetailViewController *controller = (DetailViewController *)segue.destinationViewController;
        controller.isDetailingEnabled = YES;
    }
}

Rápido

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetailingSegue" {
        let controller = segue.destinationViewController as! DetailViewController
        controller.isDetailingEnabled = true
    }    
}

DetailViewController es el nombre del segundo controlador de vista e isDetailingEnabled es una variable pública en ese controlador de vista.

Para expandir este patrón, puede tratar un método público en DetailViewController como un pseudoinicializador, para ayudar a inicializar cualquier variable requerida. Esto auto documentará las variables que deben configurarse en DetailViewController sin tener que leer su código fuente. También es un lugar práctico para poner valores por defecto.

C objetivo

- (void)initVC:(BOOL *)isDetailingEnabled {
    self.isDetailingEnabled = isDetailingEnabled
}

Rápido

func initVC(isDetailingEnabled: Bool) {
    self.isDetailingEnabled = isDetailingEnabled
}