Llamar programáticamente al botón de retroceso del controlador de navegación en iOS

84

En una aplicación de iPhone basada en UINavigationController, en un método me gustaría realizar el equivalente programático de presionar el botón Atrás y retroceder una vista.

es decir, presione automáticamente el botón Trabajos como se ve aquí:

Imagen del controlador de navegación

¿Hay una llamada genérica de iOS que pueda hacer o se requiere más información?

Oberbaum
fuente

Respuestas:

188

UINavigationControllerEl -popViewControllerAnimated:método de debe hacer lo que quieras:

[navigationController popViewControllerAnimated:YES];
Steve Harrison
fuente
12
increíble, gracias a Steve y Niels. La solución que utilicé fue [self.navigationController popViewControllerAnimated: YES]; fácil;)
oberbaum
esto funciona muy bien, excepto los controladores de vista agregados en uitabbar. ¿¿alguna pista??
virata
1
Agregué [self.navigationController popViewControllerAnimated:YES];pero no hace nada, sin embargo, hay una alerta al grabar ese botón que está funcionando.
mohsin.mr
Mmm, aparece una pantalla en blanco, una aplicación que no responde y lo siguiente en la consola: "Finalizando una transición de navegación en un estado inesperado. El árbol de la subvista de la barra de navegación podría dañarse".
Kurt
24

Suponiendo que en realidad no desea PRESIONAR el botón mediante programación, sino que simplemente copia el resultado de presionar el botón, debe indicarle al controlador de navegación que muestre el controlador de vista actual.

[self.navigationController popViewControllerAnimated:YES];

Esto lo eliminará de la pila y lo devolverá al controlador de vista anterior.

Kevin Elliott
fuente
21

Swift 3.0

Volver a la vista raíz

self.navigationController?.popToRootViewController(animated: true)

Volver a la vista anterior

self.navigationController?.popViewController(animated: true)

Swift 2.3

Volver a la vista raíz

self.navigationController?.popToRootViewControllerAnimated(true)

Volver a la vista anterior

self.navigationController?.popViewControllerAnimated(true)
Tal Zion
fuente
7

Deberías llamar

popViewControllerAnimated:

que es lo opuesto a agregar controladores de vista con pushViewController:animated:

Castillo de Niels
fuente
6
[self.navigationController popViewControllerAnimates:YES];

es la mejor opción, pero si no está en la misma clase de controlador de vista o si su delegado cambia antes de que se llame al método del botón de retroceso, también puede intentar--

primero tienes que definir el botón de retroceso ---

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"anyTitleForBackButton" style: UIBarButtonItemStyleBordered target: nil action: @selector(backButtonTapped)];

[[self navigationItem] setBackBarButtonItem: newBackButton];

[newBackButton release];

y luego en el método backButtonTapped puede llamar a--

[self.navigationController pushViewController:desiredViewController animated:YES];
Nishant Mahajan
fuente