Me gustaría sugerir otro enfoque para este problema. En lugar de usar el controlador de navegación para mostrar un controlador de vista, use desenrollar segues. Esta solución tiene algunas ventajas, pero realmente importantes:
- El controlador de origen puede volver a cualquier otro controlador de destino (no solo el anterior) sin saber nada sobre el destino.
- Los segmentos push y pop se definen en el guión gráfico, por lo que no hay código de navegación en los controladores de vista.
Puede encontrar más detalles en Unwind Segues paso a paso . El cómo hacerlo se explica mejor en el enlace anterior, incluido cómo enviar datos de regreso, pero aquí haré una breve explicación.
1) Vaya al controlador de vista de destino (no el origen) y agregue un segmento de desenrollado:
@IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
//let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
}
2) CTRL arrastre desde el controlador de vista en sí al icono de salida en el controlador de vista de origen:
3) Seleccione la función de desenrollar que acaba de crear hace unos momentos:
4) Seleccione el desenrollar segue y asígnele un nombre:
5) Vaya a cualquier lugar del controlador de vista de origen y llame al desenrollar segue:
performSegue(withIdentifier: "unwindToContact", sender: self)
He encontrado que este enfoque es muy rentable cuando su navegación comienza a complicarse.
Espero que esto ayude a alguien.