prepareforsegue performsegue perform pass for data ios swift segue

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:

  1. Abra su guión gráfico donde se encuentran sus diferentes viewController
  2. Toque el viewController desde el que desea que comience su controlador de navegación
  3. En la parte superior de Xcode, toca "Editor"
  4. -> Toque incrustar en
  5. -> 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:

  1. Primer caso : si usó: self.navigationController?.pushViewController(yourViewController, animated: true) en este caso necesita usar self.navigationController?.popViewController(animated: true)
  2. Segundo caso : si usó: self.present(yourViewController, animated: true, completion: nil) en este caso necesita usar self.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)