Pregunta Cambiar el título de UIBackButtonItem


Tengo una aplicación basada en navigationController. Quiero cambiar el título del botón Atrás para el controlador de vista raíz. He intentado el siguiente código en el método viewDidLoad de rootViewController, pero no tuve éxito:

self.navigationItem.backBarButtonItem.title = @"Back";

¿Algunas ideas?


29
2018-01-31 01:32


origen


Respuestas:


El título del botón Atrás es:

  1. El título del controlador de vista anterior
  2. El nombre del botón de retroceso del elemento de navegación del controlador de vista anterior

Si está configurando el botón Atrás para el elemento de navegación del controlador de vista actual, no está configurando el botón que se muestra en la vista actual. De hecho, está configurando el botón Atrás que se usará si presiona otro controlador de vista desde allí.


45
2017-11-25 13:58



Tuve éxito al crear mi propio UIBarButtonItem en lugar de establecer el título del existente:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

51
2018-01-31 02:35



Posiblemente ya respondido, pero no simplemente.

self.navigationItem.backBarButtonItem predeterminado a nil. Entonces, si le asigna el título, no sucederá nada porque está afectando un nil objeto de dirección. Esto no arrojará un error, porque object-c permite mensajes nil objetos.

RESPUESTA: Debe crear su propio objeto de botón para establecer su título. Usted puede initWithTitle o crearlo y luego establecer el título después.

PS - como se mencionó, el backBarButtonItem solo afecta sus vistas secundarias que se colocan encima de ella en la pila de navegación. Dependiendo de cómo haya diseñado su aplicación, la vista raíz no se puede abrir más y no puede tener un botón Atrás. Sin embargo, puedes afectar el leftBarButtonItem.


25
2017-09-08 18:19



El botón Atrás extrae su texto del título del controlador de vista principal.

En el controlador de vista principal (el controlador de vista que aparece cuando toca el botón Atrás), establezca su propio título como el texto deseado en el botón Atrás.

Por ejemplo, digamos que tenemos un RootViewController clase. Cuando hacemos clic en una celda en su vista de tabla, pulsamos una instancia de SecondViewController. Queremos el botón Atrás del SecondViewController instancia para leer, "Inicio".

en el viewDidLoad método de RootViewController.m:

self.title = @"Home";

en el viewDidLoad método de SecondViewController.m:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    

Si desea que su botón Atrás lea, "Atrás", configure el título del controlador de vista padre para @"Back";


5
2017-07-08 05:50



No puede simplemente cambiar el título del botón Atrás en el controlador de vista raíz porque el controlador de vista raíz no muestra un botón Atrás. Después de todo, es la raíz, ¿a qué puedes regresar? Si bien puede haber algo lógico en su aplicación, no hay nada obvio que la implementación predeterminada debería hacer.

Puedes colocar un botón personalizado allí en lugar de que realmente quieras un control allí (crea un UIBarButtonItem y establece navigationItem.backBarButtonItem en él), aunque eso no tendrá el mismo aspecto que uno de los predeterminados (será un cuadrado, a diferencia de una flecha).


1
2018-01-31 04:16



Las respuestas de Mihai Damian y Chris Lundie son correctas.

Sin embargo, otra cosa que debe tener en cuenta es que si cambia el elemento de navegación de viewController.title después de haber establecido su navigationItem.backBarButtonItem personalizado, volverá a su estado predeterminado, que es descartar su backBarButtonItem personalizado y en su lugar usar el nuevo título que acaba de establecer.

Por lo tanto, me aseguro de que vuelva a configurar BackBarButtonItem cada vez que cambie el título de viewController:

self.navigationItem.title = @"New Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];
backButton.title = @"Back";
self.navigationItem.backBarButtonItem = backButton;

1
2018-04-24 17:43



Tu problema probablemente sea muy similar al que aquí se describe: http://blog.tmro.net/2009/05/uitabbarbuttonitem-did-not-change-its.html

Intenta depurar para ver si hay algún _barButtonItemFlags establecido para tu botón ...


0
2018-05-18 06:39



Como se mencionó en un póster anterior (Brenden), de forma predeterminada, el valor de backBarButtonItem es nulo, por lo que al configurar el título se envía un mensaje a un objeto nulo que, por supuesto, se ignora.

Si no quiere perder el tiempo creando manualmente un nuevo botón para establecer su título, hay una solución en Interface Builder.

En IB, para un controlador de vista dado que es parte de una pila de control de navegación, puede hacer clic en el elemento de navegación que representa la barra de navegación. Cuando hace clic, el inspector de propiedades le permite establecer tres propiedades: Título, Solicitud y BackButton.

Si, en el campo BackButton, ingresas cualquier texto aleatorio anterior, esto tiene el efecto de instanciar un objeto backBarButtonItem y en tu código, ahora puedes establecer su título para cualquier texto que desees.

Espero que esto ayude a alguien.


0
2018-02-14 05:56



Tal vez no quieras que cada viewController empujado de un viewController tenga un botón Cancelar que simplemente establecer un leftBarButtonItem en la pantalla viewController con un título personalizado

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"back", @"") style:UIBarButtonSystemItemCancel target:self action:@selector(popViewController)] autorelease];

- (void)popViewController {
    [self.navigationController popViewControllerAnimated:YES];
}

0
2018-04-24 11:45