Envío al usuario a una página con un clic de botón. Esta página es un UITableViewController .
Ahora, si el usuario toca una celda, me gustaría empujarlo a la página anterior.
Pensé en algo así, self.performSegue("back")....
pero parece ser una mala idea.
¿Cuál es la forma correcta de hacerlo?
Respuestas:
Swift 3:
Si desea volver al controlador de vista anterior
Si desea volver al controlador de vista raíz
fuente
.popViewController(animated: true)
_ = self.navigationController?.popToRootViewController(animated: true)
_ =
es la convención rápida para eso.Swift 3 , Swift 4
navigationController es opcional porque puede que no haya uno.
fuente
[weak self]
yself?.navigationController?.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as?
Pero cuando uso esto no puedo usar esoSwift 3
Podría llegar tarde en la respuesta, pero para Swift 3 puede hacerlo de esta manera:
fuente
dismiss:
, no solo descartará el controlador de vista actual, sino también el controlador de vista raíz, y no es lo que se le preguntó aquí.dismiss(animated: true, completion: nil)
no funciona después de la rotación!Swift 4
Hay dos formas de volver / volver al ViewController anterior:
self.navigationController?.pushViewController(yourViewController, animated: true)
en este caso necesita usarself.navigationController?.popViewController(animated: true)
self.present(yourViewController, animated: true, completion: nil)
en este caso necesita usarself.dismiss(animated: true, completion: nil)
fuente
En el caso en que presentó un
UIViewController
desde dentro de unUIViewController
ie ..Simplemente llame a la
dismiss
función:fuente
self.dismiss(animated: true)
- no funciona después de la rotaciónSwift 5 y superior
caso 1: uso con controlador de navegación
caso 2: uso con el controlador de vista actual
fuente
Si Segue es una especie de 'Show' o 'Push', puede invocar "popViewController (animado: Bool)" en la instancia de UINavigationController. O si segue es una especie de "presente", llame a "despedir (animado: Bool, finalización: (() -> Void)?)" Con la instancia de UIViewController
fuente
para Swift 3 solo necesita escribir la siguiente línea de código
fuente
Pruebe esto: para la vista anterior use esto:
pop to root usa este código:
fuente
Swift 4.0 Xcode 10.0 con un TabViewController como última vista
Si su último ViewController está incrustado en un TabViewController, el siguiente código lo enviará a la raíz ...
Pero si realmente desea volver a la última vista (que podría ser la vista Tab1, Tab2 o Tab3 ...), debe escribir el siguiente código:
Esto funciona para mí, estaba usando una vista después de uno de mis TabView :)
fuente
Para preguntas sobre cómo incrustar su viewController en un NavigationController en el guión gráfico:
fuente
Este funciona para mí (Swift UI)
fuente
Lo hice asi
fuente
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:
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:
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:
He encontrado que este enfoque es muy rentable cuando su navegación comienza a complicarse.
Espero que esto ayude a alguien.
fuente
Puedo redirigir a la página raíz escribiendo código en "viewDidDisappear" del controlador navegado,
override func viewDidDisappear(_ animated: Bool) { self.navigationController?.popToRootViewController(animated: true) }
fuente