ios - performsegue - Regrese programáticamente a ViewController anterior en Swift
segue swift 4 (13)
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 como
self.performSegue("back")....
pero esto parece ser una mala idea.
¿Cuál es la forma correcta de hacerlo?
En el caso en el que presentó un
UIViewController
desde un
UIViewController
es decir ...
// Main View Controller
self.present(otherViewController, animated: true)
Simplemente llame a la función de
dismiss
:
// Other View Controller
self.dismiss(animated: true)
Este funciona para mí (Swift UI)
struct DetailView: View { @Environment(/.presentationMode) var presentationMode: Binding<PresentationMode> var body: some View { VStack { Text("This is the detail view") Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Text("Back") } } } }
Pruebe esto: para la vista anterior use esto:
navigationController?.popViewController(animated: true)
pop to root usa este código:
navigationController?.popToRootViewController(animated: true)
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) }
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
para Swift 3 solo necesita escribir la siguiente línea de código
_ = navigationController?.popViewController(animated: true)
Para preguntas sobre cómo incrustar su viewController en un NavigationController en el guión gráfico:
- Abra su guión gráfico donde se encuentran sus diferentes viewController
- Toque el viewController desde el que desea que comience su controlador de navegación
- En la parte superior de Xcode, toca "Editor"
- -> Toque incrustar en
- -> Toque "Controlador de navegación
Swift 3 , Swift 4
if movetoroot {
navigationController?.popToRootViewController(animated: true)
} else {
navigationController?.popViewController(animated: true)
}
navigationController es opcional porque puede que no haya uno.
Swift 3
Podría llegar tarde en la respuesta, pero para Swift 3 puede hacerlo de esta manera:
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "< Back", style: .plain, target: self, action: #selector(backAction))
// Do any additional setup if required.
}
func backAction(){
//print("Back Button Clicked")
dismiss(animated: true, completion: nil)
}
Swift 3:
Si desea volver al controlador de vista anterior
_ = navigationController?.popViewController(animated: true)
Si desea volver al controlador de vista raíz
_ = navigationController?.popToRootViewController(animated: true)
Swift 4
Hay dos formas de volver / volver al ViewController anterior:
-
Primer caso
: si usó:
self.navigationController?.pushViewController(yourViewController, animated: true)
en este caso necesita usarself.navigationController?.popViewController(animated: true)
-
Segundo caso
: si usó:
self.present(yourViewController, animated: true, completion: nil)
en este caso necesita usarself.dismiss(animated: true, completion: nil)
En el primer caso, asegúrese de haber incrustado su ViewController en un NavigationController en su guión gráfico
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 ...
navigationController?.popToRootViewController(animated: true)
navigationController?.popViewController(animated: true)
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:
_ = self.navigationController?.popViewController(animated: true)
Esto funciona para mí, estaba usando una vista después de uno de mis TabView :)
Swift 5 y superior
caso 1: uso con controlador de navegación
self.navigationController?.popViewController(animated: true)
caso 2: uso con el controlador de vista actual
self.dismiss(animated: true, completion: nil)