Actualmente, el valor predeterminado del botón de la barra izquierda es el título de la vista que cargó la actual, en otras palabras, la vista que se mostrará cuando se presione el botón (botón Atrás).
Quiero cambiar el texto que se muestra en el botón a otra cosa.
Intenté poner la siguiente línea de código en el método viewDidLoad del controlador de vista, pero parece que no funciona.
self.navigationItem.leftBarButtonItem.title = @"Log Out";
¿Qué tengo que hacer?
Gracias.
-viewDidLoad:
En ChildVC esto funcionó para mí ...
¡Funciona también en Swift!
fuente
Aquí está la documentación para backBarButtonItem :
Controlador de vista A (el controlador de vista "principal" ):
Cuando cualquier otro controlador de vista B está en la parte superior de la pila de navegación, y A está justo debajo de él, el botón de retroceso de B tendrá el título "Corto" .
fuente
en Xcode 4.5 usando storyboard, la solución más fácil que he encontrado cuando el valor del botón Atrás no tiene que cambiar dinámicamente es usar el campo "Botón Atrás" asociado con el elemento de navegación del controlador de vista al que quiere que el botón "Atrás" diga algo más.
por ejemplo, en la captura de pantalla a continuación, quiero que el botón Atrás para los controladores de vista que presiono tenga "Atrás" como título del botón Atrás.
por supuesto, esto no funcionará si necesita el botón de retroceso para decir algo ligeramente diferente cada vez ... hay todas las otras soluciones aquí para eso.
fuente
Lo sé, la pregunta es muy antigua, pero encontré una buena solución.
Funciona desde childView! Probado con iOS 7.
fuente
Tal vez estoy siendo demasiado simplista, pero según la documentación de Apple, la redacción es:
La solución marcada como correcta arriba establece un elemento de botón predeterminado desde el controlador principal. Es la respuesta correcta, pero estoy resolviendo el problema cambiando la
self.title
propiedad del UIViewController justo antes de insertar el nuevo controlador en la pila NavigationController.Esto actualiza automáticamente el título del botón de retroceso en el siguiente controlador, y siempre que
self.title
vuelva a configurar lo que debería estar,viewWillAppear
no puedo ver que este método cause demasiados problemas.fuente
Esto funciona mejor para mí. Tratar :
fuente
En Swift / iOS8, lo siguiente funcionó para mí:
Portado de la respuesta de Felipe.
fuente
self.navigationController?.navigationBar.topItem?.backBarButtonItem
Ok, aquí está el camino. Si tiene un controlador de vista "primero" y navega por otro controlador de vista "segundo" presionando un botón o etc., debe hacer un trabajo. Primero necesita crear un BarButtonItem en el método ViewDidLoad del "segundo" controlador de vista como este;
Después de hacer eso, debe escribir en el código para la acción "btnBack" en el mismo archivo .m como este;
Eso es todo.
fuente
leftBarButtonItem
no tiene la apariencia de abackBarButtonItem
, si eso es importante en el diseño de la aplicación.Tenía un controlador de vista principal con un título muy largo. Esto dio como resultado que el texto del botón de retroceso sangrara en el título del controlador de vista secundario.
Después de probar un montón de soluciones diferentes, esto es lo que terminé haciendo (ampliando el enfoque @ john.k.doe):
Usando Xcode 7.2, Swift 2
Navigation Item
a la Parent escena Vista Controlador (no el niño VC)Attributes Inspector
de su nuevoNavigation Item
, escriba unspace
personaje en elBack Button
campo. Más sobre esto más tarde.retazo:
Explicación:
El botón de retroceso pertenece al controlador de vista principal. El
Navigation Item
le da un control al botón de retroceso, para que pueda establecer el título en código o en el Guión gráfico.Nota:
Si deja el
Navigation Item
Back Button
texto como la cadena vacía predeterminada, el título del botón Atrás se convertirá en "Atrás".Otros enfoques funcionan, ¿por qué usar este ?:
Si bien es posible anular el título del botón de retroceso en el controlador de vista infantil, fue un desafío manejarlo hasta que ya apareció brevemente en la pantalla.
Algunos de los enfoques construyen un nuevo botón de retroceso y anulan el existente. Estoy seguro de que funciona, y probablemente sea necesario en algunos casos de uso. Pero prefiero aprovechar las API existentes cuando sea posible.
Cambiar el
title
controlador de vista principal es la solución más rápida para algunas situaciones. Sin embargo, esto cambia el título principal, por lo que debe administrar el estado. Las cosas también se complicanTab Bar Controller
porque los cambios en el título causan efectos secundarios con losTab Bar Item
títulos.fuente
Para aquellos que usan guiones gráficos, simplemente seleccione el marco del controlador de vista principal (no el que contiene la vista de destino) (asegúrese de hacer clic derecho en la barra de navegación, luego abra el inspector de atributos, donde encontrará tres entradas de formulario. El tercero " botón de retroceso "es lo que estamos buscando.
fuente
Versión rápida:
En su hijo ViewController:
fuente
Aquí hay otra forma de hacerlo.
En su controlador de vista principal, implemente el siguiente método:
En su controlador de vista hijo, cuando desee cambiar el título, esto funcionará:
Nunca pude hacer que la
parentViewController
propiedad funcionara:No sé si eso es un error o no lo estoy usando correctamente. Pero agarrar el penúltimo controlador de vista en la
viewControllers
matriz apunta al controlador de vista principal, y puedo llamar a los métodos principales correctamente con esa referencia.fuente
Okay. Yo personalmente odiaba todas estas opciones. Por eso se me ocurrió el mío.
Basado en la información que he visto. Parece que el controlador de vista anterior tiene el control de su propio botón "Atrás" que se presentará en el controlador de vista push.
He creado un método de carga diferida para el elemento de navegación en el controlador que desea cambiar el botón Atrás.
El mío es un controlador de invitación al comprador
Invite Buyer es el texto que se establece de manera predeterminada.
pero el botón de retroceso debía ser Invitar
Aquí está el código que usé para crear el botón Atrás.
Coloqué este código en la parte superior del archivo Implementatio (.m) del controlador y anuló el método del super automáticamente.
Siento que esta es una forma mucho más elegante de lograr esto.
Coloco este código en un lugar y se rellena automáticamente cuando es necesario.
No es necesario llamar al código antes de cada solicitud de inserción.
Espero que esto ayude
fuente
fuente
Aquí está la respuesta:
En
viewDidAppear:animated
(NO enviewDidLoad
) haga lo siguienteEso si quieres mantener la forma del botón Atrás.
fuente
Ninguna de las soluciones explicadas aquí funcionó para mí. Entonces, lo que hice fue eliminar el título de la escena de donde vine de la siguiente manera:
self.title = @"";
Entonces, cuando se presenta una nueva escena, el texto posterior no aparece.
Absolutamente estoy de acuerdo en que esta no es una solución clara, pero funcionó y nada de lo explicado funcionó para mí.
fuente
Descubrí que es mejor cambiar el título del controlador de vista actual en la pila de navegación al texto deseado del botón de retroceso antes de presionar al siguiente controlador de vista.
Por ejemplo
Luego, en viewDidAppear, vuelva a establecer el título en el título deseado para el VC original. Voila!
fuente
Para Swift:
fuente
Descubrí que la forma más fácil de cambiar el nombre del botón Atrás es establecer el título de los controladores de vista en el título del botón Atrás y luego reemplazar el título Vista en el elemento de navegación de los controladores de vista a una etiqueta personalizada con real. nombre.
Me gusta esto:
CustomViewController.m
Esto hará que su título en UINavigationBar parezca nativo. Dando al controlador de vista la capacidad de tener título separado y título del botón de retroceso.
En el caso de los controladores de vista A y B, A es responsable de decir cómo debe verse el botón de retroceso, mientras se muestra B.
EDITAR: Esto también mantiene el aspecto nativo del botón de retroceso (el elemento del botón de la barra de flecha izquierda).
fuente
Este código también funciona. Ponga esto en el controlador raíz del controlador de navegación:
fuente
Soy nuevo en iOS, pero proporcionaré mi respuesta muy simple de anular la clase de controlador de navegación. Simplemente anulo los métodos push y pop y guardo el título del controlador de vista anterior. Perdón por pegar en el bloque js. Estaba un poco confundido sobre cómo pasarlo en el bloque de código normal.
fuente
self.navigationController.navigationBar.backItem.title = @"TEXT";
Y en Swift:
fuente
puede ponerlo donde desee en el código del controlador parental, lo que le permite tener diferentes botones de retroceso para diferentes vistas secundarias.
fuente
La mayoría de las soluciones mata el estilo original de BackButton (el botón de la barra de flecha izquierda) al tiempo que agrega un botón habitual con el título deseado.
Entonces, para mantener el estilo original, hay 2 formas:
1º: Usar un estilo de botón no documentado (110 o algo así) que prefiero no hacer. Pero si lo desea, puede encontrar cómo hacerlo aquí, en stackoverflow.
2º: Usar la idea de Trenskow. Me gustó y lo uso un poco cambiado.
En lugar de anular el título (NSString *), decidí mantener el título original de la siguiente manera (lo que me permite usar los títulos de nib y el título dado en el estado de empuje por cierto).
Esta solución funciona bien y parece nativa. Además, si lo usa en el método viewDidLoad, evita la ejecución más de 1 vez.
También probé la solución de Jessedc pero se ve mal. Hace visible el cambio de la barra de título del usuario sobre la marcha del original al BackButton deseado y viceversa.
fuente
Esto funciona para mí como una versión "simplificada" de las respuestas publicadas anteriormente.
Recuerde poner el código dentro del controlador de vista principal (por ejemplo, la vista que tiene su vista de tabla o UITableViewController), no la vista secundaria o de detalle (por ejemplo, UIViewController).
Puede localizar fácilmente la cadena del botón Atrás de esta manera:
fuente
Tenemos dos VC's A y B.
Si desea cambiar el título en B, escriba este código en A
Swift 4.1 Xcode 9.4
fuente
La respuesta de Stan fue la mejor. Pero también tiene un problema, cuando usa el controlador con una barra de pestañas y cambia el título del controlador, también puede cambiar el título de la barra de pestañas, por lo que la mejor respuesta es cambiar view_controller.navigationItem.title y usar view_controller.navigationItem .title en la función. La respuesta está aquí: (con ARC y agregarlos a viewDidLoad de la vista)
En mi uso, lo hago una función como esta, solo tengo la función con un código de línea en viewDidLoad.
fuente
Si desea no solo cambiar el texto del botón Atrás al mismo texto y mantener la forma original de la flecha izquierda, sino también hacer algo cuando el usuario hace clic en el botón Atrás, le recomiendo que eche un vistazo a mi " CustomNavigationController " .
fuente
PROBLEMA: el texto "Atrás" en la barra de navegación no se puede reemplazar.
MOTIVO: La etiqueta "Atrás" se establece en la barra de navegación después de presionar una vista porque el atributo .title en el controlador de vista principal se estableció en nulo (o no inicializado).
UNA SOLUCIÓN: Si configura self.title = "Lo que sea ..." verá que en lugar de "Atrás" aparecerá "Lo que sea ..." después de presionar el nuevo controlador de vista.
fuente