El "botón de retroceso" de un UINavigationController
por defecto muestra el título de la última vista en la pila. ¿Hay alguna forma de tener texto personalizado en el botón de retroceso?
ios
iphone
uinavigationcontroller
Ali Shafai
fuente
fuente
self.navigationController.navigationBar.topItem.title = @"Custom text";
Respuestas:
Desde este enlace :
Como dijo Tyler en los comentarios:
fuente
release
elUIBarButtonItem
.UIBarButtonItemStyleBordered
con una llamada a la propiedadself.navigationItem.backBarButtonItem.style
. Documentación: developer.apple.com/library/ios/documentation/uikit/reference/…Puede configurar el texto en el Creador de interfaces:
Seleccione el elemento de navegación del ViewController al que volvería el botón Atrás:
En el inspector de atributos del panel de utilidades, ingrese su etiqueta para el Botón Atrás:
Preferiría este enfoque en lugar de establecer el título en código como en la respuesta aceptada.
fuente
Yo uso esto:
fuente
Encontré una solución práctica para esto simplemente configurando el título del controlador antes de insertar otro controlador en la pila, de esta manera:
Luego, asegúrate de establecer el título original de
viewWillAppear
esta manera:Esto funciona porque el comportamiento predeterminado de
UINavigationController
cuando se construye el botón de retroceso durante una operación de inserción es usar el título del controlador anterior.fuente
El título del botón de retroceso predeterminado es el título de la vista anterior, por lo que un truco rápido que uso es colocar el siguiente código en el archivo .m de la vista anterior.
fuente
en su método init, agregue el siguiente código:
luego agregue un método simple, para permitir el descarte de viewcontroller:
fuente
Agregue el siguiente código en viewDidLoad o loadView
Lo probé en iPhone y iPad con iOS 9
fuente
navigationController
ytopItem
, por ejemplo:self.navigationController?.navigationBar.topItem?.title = "Custom Text"
Agregando a la respuesta de Rein. Tenga en cuenta de los documentos de Apple que la declaración de backBarButtonItem es esta:
Por lo tanto, la respuesta de Rein perderá memoria porque el setter sintetizado será
retain
la instancia que le pase, que nunca se lanza explícitamente. Puede remediar esto usandoautorelease
O podría apuntar una variable a la instancia para que pueda liberarla explícitamente más tarde:
¡Espero que esto ayude!
fuente
fuente
He descubierto algo interesante Si subclasifica
UINavigationController
y anula elpushViewController:animated:
método y hace algo como esto: (tenga en cuenta que estoy usando ARC)Luego, para todos los
ViewControllers
que se presionan con su controlador de navegación, tendrá el botón "Atrás" automáticamente. Si desea cambiar el texto de ciertos controladores de vista, puede intentar y tal vez convertir el controlador de vista a una determinada clase o su propio protocolo personalizado (que su controlador de vista hereda del cual podría tener un métodobackButtonText
o algo tonto como ese) que puede darle cierta información sobre el controlador de vista que viene para que pueda personalizar el texto del botón de retroceso. Ahora el texto del botón de retroceso se ocupa en un lugar que debe ser el único responsable. Tengo que admitir que crear un nuevo botón para cambiar el texto apesta, pero bueno.¿Alguien puede pensar en una razón por la que no hacerlo así? Al menos, no tiene que jugar con los títulos del controlador de vista ni recordar crear un nuevo botón de retroceso antes de presionar el controlador de vista en el controlador de navegación.
fuente
La respuesta de Rein funciona bien.
Tenga en cuenta que si presiona más de un controlador de vista, aparecerá el título del botón de retroceso modificado para cada uno de ellos, que puede no ser lo que desea.
En ese caso, deberá crear el UIBarButtonItem personalizado cada vez que presione un controlador de vista.
Además, asegúrese de hacerlo antes de presionar el controlador de vista, de lo contrario obtendrá un problema en la pantalla a medida que cambie el título.
fuente
Ampliando la sugerencia de Aubrey, puede hacer esto en el controlador de vista secundario:
cree dos variables para almacenar los valores antiguos del elemento de navegación principal del objeto y el elemento de navegación del elemento principal
en
viewDidLoad
, agregue lo siguiente:en
viewWillDisappear
, agregue lo siguiente:No es perfecto Verá que el título de la vista principal cambia a medida que se anima el nuevo controlador. PERO esto logra el objetivo de etiquetar de forma personalizada el botón Atrás y mantenerlo en forma de un botón Atrás estándar.
fuente
Pon esto en ti
viewDidLoad
, espero que resulte en lo que estás buscandofuente
si desea establecer el título en el controlador LLEGADA (a veces más lógica ...) en swift 3 do:
en el próximo controlador:
generalmente pongo self.setBackButtonNavBar en una extensión de controlador.
fuente
Sé que esta es una vieja pregunta y las respuestas están un poco actualizadas.
La manera fácil es hacer esto en ViewController primario:
es decir, el que te lleva al siguiente controlador de vista.
fuente
Al hacer esto en código, elimine el estilo del botón de retroceso del
UINavigationConroller
. Si agrega un elemento de navegación en cada una de sus vistas, puede establecer el título del botón de retroceso enStoryBoard
.fuente