ios swift – descarta el controller de vista raíz del controller de navigation

Estoy abriendo un controller de navigation desde un clic de button de mi controller de vista principal.

Programé un elemento del button de la barra izquierda en el controller de navigation que quiero descartar el controller de navigation y volver a mi controller principal.

Básicamente, voy a volver al controller de vista raíz del controller de navigation.

He intentado

navigationController?.dismissViewControllerAnimated(true, completion: nil) 

y

 self.dismissViewControllerAnimated(true, completion: nil) 

y obtenga una NSException en ambos.

Por favor avise.

Si está presionando su ViewController , debe usar pop para eliminar ese ViewController de Navigation Stack y aterrizar en el ViewController anterior. Prueba esto

 self.navigationController?.popViewControllerAnimated(true); 

SWIFT 3

 _ = navigationController?.popViewController(animated: true); 

Swift 3:

 self.view.window!.rootViewController?.dismiss(animated: false, completion: nil) 

Desactivará todos los controlleres de vista presentados y seguirá siendo el controller de vista raíz.

dismissViewController funciona cuando se muestra un viewController usando presentViewController, que puede ser el controller de vista raíz de una stack de navigation o un controller de vista independiente.

 self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil) 

Prueba esto 🙂

Un año más tarde … La exception indica que hay algo mal con el selector que proporciona al parámetro de acción, al agregar el button de la barra izquierda.

Algo así debería funcionar:

creación del elemento del button de barra:

 let backBarButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.stop, target: self, action: #selector(dismissView)) 

Desestime el controller de vista raíz:

 func dismissView() { self.dismiss(animated: true, completion: nil) }