¿Cómo cambio el título del botón "atrás" en una barra de navegación

224

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.

Valle
fuente

Respuestas:

345

Esto debe colocarse en el método que llama al ViewController titulado "NewTitle". Justo antes de la declaración push o popViewController.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];
Jordán
fuente
47
Cuando se encuentra en el controlador de vista secundario, llamar a esto desde el controlador de vista secundario no funcionará. Tiene que llamar a esto desde el controlador de vista principal, mientras está dentro del controlador de vista secundario.
Alex Reynolds
2
Para cambiar el botón de retroceso para mi controlador de vista de tercer nivel (segundo impulso) tuve que usar la siguiente línea en lugar de la respuesta anterior: [[self.parentViewController navigationItem] setBackBarButtonItem: newBackButton]; ¿Estoy haciendo algo mal?
JonB
44
Jordan dice que "[agregó] un poco más de claridad sobre dónde colocar el código". Aquí hay aún más claridad: colóquelo en el primer controlador (también conocido como padre), inmediatamente antes de la llamada para empujar el segundo controlador (también conocido como hijo).
benvolioT
1
puede crear un BaseViewController personalizado y ponerlo en-viewDidLoad:
ArtFeel
2
No tiene que hacer esto justo antes de presionar o hacer estallar. Puede hacerlo en viewDidLoad o loadView o en cualquier otro lugar donde configure el título y otras propiedades para esta vista. La respuesta de Victor Bogdan a continuación es más clara, en mi humilde opinión.
Joe Strout
98

En ChildVC esto funcionó para mí ...

self.navigationController.navigationBar.topItem.title = @"Back";

¡Funciona también en Swift!

self.navigationController!.navigationBar.topItem!.title = "Back"
Peter Pan
fuente
44
Probado y verificado en iOS 7 en Xcode 5.0.2. Sin embargo, esto cambiará el título de la pantalla anterior a Atrás cuando vuelvas a ella.
Alex Zavatone
La solución más simple. Funciona en iOS 6 y 7. Poner en la base UIViewController y listo. Mucho mejor que la solución o configuración de IB en el empuje vc.
Eric Chen
46
cambia el título del controlador de vista anterior, ese es el problema en esta solución
Nikita
2
@Nikita, puedes volver a poner el mosaico a la vistaWillDisappear
Dan Beaulieu
81

Aquí está la documentación para backBarButtonItem :

"Cuando este elemento de navegación está inmediatamente debajo del elemento superior en la pila, el controlador de navegación deriva el botón de retroceso para la barra de navegación de este elemento de navegación. [...] Si desea especificar una imagen o título personalizado para el botón de retroceso , puede asignar un elemento de botón de barra personalizado (con su título o imagen personalizados) a esta propiedad ".

Controlador de vista A (el controlador de vista "principal" ):

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

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" .

Victor Bogdan
fuente
44
La parte difícil es que necesita configurar el botón Atrás en el controlador de vista PADRE y no en la vista secundaria. Perdí una hora y me di cuenta de esto.
Merkurial
56

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.

ingrese la descripción de la imagen aquí

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.

john.k.doe
fuente
La pregunta original no decía nada sobre el uso de guiones gráficos, por lo que definitivamente es bueno, esta no es la respuesta aceptada, sin embargo, es una solución correcta para el desarrollo basado en guiones gráficos.
villapossu
42

Lo sé, la pregunta es muy antigua, pero encontré una buena solución.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

Funciona desde childView! Probado con iOS 7.

seniorbenelli
fuente
Esto solo parece funcionar a un nivel. No está funcionando para un niño de un niño para mí. iOS 8.
narco
26

Tal vez estoy siendo demasiado simplista, pero según la documentación de Apple, la redacción es:

Si ninguno de los controladores de vista especifica un elemento de botón de barra personalizado , se utiliza un botón de retroceso predeterminado y su título se establece en el valor de la propiedad de título del controlador de vista anterior, es decir, el controlador de vista un nivel por debajo de la pila.

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.titlepropiedad 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.titlevuelva a configurar lo que debería estar, viewWillAppearno puedo ver que este método cause demasiados problemas.

Jessedc
fuente
19

Esto funciona mejor para mí. Tratar :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Felipe FMMobile
fuente
19

En Swift / iOS8, lo siguiente funcionó para mí:

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

Portado de la respuesta de Felipe.

Duncan Smith
fuente
la sintaxis rápida de 1.1 esself.navigationController?.navigationBar.topItem?.backBarButtonItem
Warren Burton
3
El estilo debe ser UIBarButtonItemStyle.Plain
Micro
2
Gracias por esto. Qué API realmente patética es esta. Y representante de UIKit en general. Entre las barras de navegación y las Barras de estado en iOS, es una maravilla que aún desarrollemos para esta maldita plataforma. ¡Agradezca al bebé Jesús por Stack Overflow y sus colaboradores!
Womble
@Wobmle: Deberías desarrollar para Android durante unos meses;)
fl034
17

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;

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

Después de hacer eso, debe escribir en el código para la acción "btnBack" en el mismo archivo .m como este;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

Eso es todo.

EEE
fuente
2
A leftBarButtonItemno tiene la apariencia de a backBarButtonItem, si eso es importante en el diseño de la aplicación.
Alex Reynolds
1
De las soluciones publicadas (muchas gracias), esta parece funcionar, aunque como dijo Alex anteriormente, el botón de la barra izquierda no parece un elemento de la barra posterior. ¿Cómo puedo hacer que se vea como un elemento de la barra trasera?
Dale
17

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

  1. En el guión gráfico, añadir una Navigation Itema la Parent escena Vista Controlador (no el niño VC)

elemento de navegación

  1. En el Attributes Inspectorde su nuevo Navigation Item, escriba un spacepersonaje en el Back Buttoncampo. Más sobre esto más tarde.

elemento de navegación en Ver jerarquía

agregar un carácter de espacio al campo Botón de retroceso

  1. En el Parent controlador de vista, añadir el siguiente código:

retazo:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

Explicación:

El botón de retroceso pertenece al controlador de vista principal. El Navigation Itemle 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 Buttontexto 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 titlecontrolador 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 complican Tab Bar Controllerporque los cambios en el título causan efectos secundarios con los Tab Bar Itemtítulos.

Robert Chen
fuente
10

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.

pedrouan
fuente
44
Esta es la mejor solución si no le importa la localización.
MiQUEL
7

Versión rápida:

En su hijo ViewController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}
buxik
fuente
esto realmente cambiará el título del controlador de vista anterior en la pila a "TEXTO", que es menos que ideal.
gravitron
6

Aquí hay otra forma de hacerlo.

En su controlador de vista principal, implemente el siguiente método:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

En su controlador de vista hijo, cuando desee cambiar el título, esto funcionará:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

Nunca pude hacer que la parentViewControllerpropiedad funcionara:

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

No sé si eso es un error o no lo estoy usando correctamente. Pero agarrar el penúltimo controlador de vista en la viewControllersmatriz apunta al controlador de vista principal, y puedo llamar a los métodos principales correctamente con esa referencia.

Alex Reynolds
fuente
6

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.

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

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

El codificador perezoso
fuente
5
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];
Gopikrishna
fuente
5

Aquí está la respuesta:

En viewDidAppear:animated(NO en viewDidLoad) haga lo siguiente

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

Eso si quieres mantener la forma del botón Atrás.

Basheer_CAD
fuente
No está mal, excepto que pueden verlo cambiar títulos. Lo intenté en viewWillAppear y no funciona.
Travis M.
5

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í.

Javier Calatrava Llavería
fuente
Hombre, debo decirte que es 2017 y todavía es un dolor en el a $$ para manejar el botón de retroceso. Su método funcionó para mí y terminé con el signo "<" aunque quería la palabra "Cancelar", pero me conformaré con lo que obtuve. :)
AnBisw
5

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

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

Luego, en viewDidAppear, vuelva a establecer el título en el título deseado para el VC original. Voila!

OneInABajilian
fuente
5

Para Swift:

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton
Ryan R
fuente
4

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

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

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).

Trenskow
fuente
4

Este código también funciona. Ponga esto en el controlador raíz del controlador de navegación:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
usuario2666203
fuente
4

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.

#import "MyCustomNavController.h"


@implementation MyCustomNavController {

    NSString *_savedTitle;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
    _savedTitle = self.topViewController.title;

    self.topViewController.title = title;
    [super pushViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {

    [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
    return [super popViewControllerAnimated:animated];
}

@end

Sergey Brazhnik
fuente
4

self.navigationController.navigationBar.backItem.title = @"TEXT";

Y en Swift:

self.navigationController?.navigationBar.backItem?.title = "TEXT"
GS
fuente
3
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

puede ponerlo donde desee en el código del controlador parental, lo que le permite tener diferentes botones de retroceso para diferentes vistas secundarias.

chikuba
fuente
3

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).

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

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.

Stan
fuente
2

Esto funciona para mí como una versión "simplificada" de las respuestas publicadas anteriormente.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

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:

backButton.title = NSLocalizedString(@"Back Title", nil);
Lex L.
fuente
2

Tenemos dos VC's A y B.

Si desea cambiar el título en B, escriba este código en A

- (IBAction)goToBViewController:(UIButton *)sender {

    BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:nil
                                                                 action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [self.navigationController pushViewController:vc animated:NO];

}

Swift 4.1 Xcode 9.4

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)
iOS
fuente
1

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)

  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

En mi uso, lo hago una función como esta, solo tengo la función con un código de línea en viewDidLoad.

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}
jtianling
fuente
1

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 " .

jianpx
fuente
1

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.

Javier Calatrava Llavería
fuente