Cómo cambiar el texto en un botón de retroceso

90

Por defecto, el botón Atrás usa como texto el título de un controlador de vista. ¿Puedo cambiar el texto del botón Atrás sin cambiar el título de un controlador de vista? Necesito esto porque tengo un controlador de vista cuyo título es demasiado largo para mostrar y, en este caso, me gustaría mostrar solo "Atrás" como título para el botón Atrás.

Intenté lo siguiente que no funcionó:

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

Gracias.

Ilya Suzdalnitski
fuente
3
Tenga en cuenta que los botones de retroceso tienen títulos por una razón. Al cambiar el título a "Atrás", le está robando al usuario información sobre a qué se remonta el botón.
Simon

Respuestas:

167

Tratar

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

Encontré eso mirando los documentos backBarButtonItem en los documentos de Apple para UINavigationItem .

Marc W
fuente
1
Lo siento, no tengo la oportunidad de probar esto en este momento, pero ¿esto aplica la forma de punta izquierda de los botones Atrás incorporados, o mantiene la forma rectangular predeterminada de UIBarButtonItem?
Marco
De hecho, no estoy seguro. Supongo que solo mantendría la forma del botón de retroceso automáticamente ya que está configurando la propiedad backButton, pero tendría que probarlo para averiguarlo. Yo también tengo curiosidad.
Marc W
2
¡Sí, funcionó! Sí cambia el título y sí, guarda la forma. Gracias por ayudar.
Ilya Suzdalnitski
1
Nota: el botón de retroceso se retiene dos veces [1x de asignación, 1x de retención de la propiedad]. Sin embargo, si no cambia el botón de retroceso, es efectivamente inofensivo.
Kelvin
29
Vea el comentario de Marco a continuación: debe llamar a esto en el controlador que está a punto de impulsar algo nuevo, no en el controlador que se está presionando.
Proyecto de ley
97

El enfoque de Marc W funcionó muy bien una vez que descubrí a qué controlador aplicarlo: el que se cambia de título, no el que está en la parte superior. Entonces, si esta es la pila de navegación:

(bottom)  ControllerA -> ControllerB  (top)

... y desea dar un título más corto para ControllerA en el botón de retroceso que se muestra cuando ControllerB está en la parte superior , aplica el cambio de propiedad a ControllerA .

Así que está más en el contexto de self.title, no como los otros establecedores de botones de barra izquierda / derecha.

Marco
fuente
13
Este es un detalle muy importante.
Proyecto de ley
4
wcochran, funciona con el guión gráfico, solo asegúrese de configurar el botón Atrás del controlador principal. Entonces, si tiene el controlador A que apunta al controlador B (a través de la secuencia del guión gráfico), para personalizar el texto del botón Atrás en el controlador B, debe establecer la propiedad "Botón Atrás" para el controlador A en el editor del guión gráfico.
interrumpir el
Gracias Marco. Lo que sentí acerca de esta pregunta fue que todos están tratando de responder (y responder correctamente) pero no por la pregunta que se está formulando. Básicamente, das en el clavo en la cabeza y correctamente. ¡Gracias por eso!
theiOSguy
+1 para detalles importantes. La respuesta anterior no funcionará para usted a menos que comprenda ESTA respuesta.
baptzmoffire
Tienes razón, es un poco difícil acostumbrarse al teclado del nuevo MacBook One.
Mason G. Zhwiti
48

Puedes hacerlo en el guión gráfico. Busque el controlador de vista al que desea volver (el que tiene el título largo), seleccione su Elemento de navegación y abra el Inspector de atributos (Alt + Cmd + 4), inserte el título personalizado del Botón Atrás.

enter image description here

alyoka
fuente
Esto era exactamente lo que necesitaba, ya que quería que todos los botones de retroceso tuvieran el texto "Atrás" en lugar de los títulos de navegación del controlador anterior.
Dave
8
Solo para tener en cuenta, el texto del botón Atrás se establece en la vista desde la que se empujó el siguiente controlador, no en el controlador de vista que ha mostrado actualmente.
Darbio
Esta es una buena solución simple, pero por favor, no van cambiar el nombre de todos los botones de nuevo a "Volver", que va en contra de Apple HIG y derrotas parte del propósito de un botón de retroceso. :(
Samuel Goodwin
Funcionó muy bien. Solo asegúrese de GUARDAR el archivo Storyboard. ¡Mi primer intento no funcionó porque no noté que el Storyboard no se había guardado! Y sí, ¡cambia el botón ATRÁS en el controlador de vista del que viene!
EricWasTaken
Muy bien, pero ¿y si quiero dejar solo una flecha, sin ningún texto? :)
Iurii Vasylenko
40

Gracias Marco ... eso me ayudó ...

Aquí esta lo que hice.

Si está utilizando un tableView para navegar a diferentes vistas ... ponga el código:

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

En su didSelectRowAtIndexPathmétodo ... del primer controlador ... controlador A.

Cuando navegue hasta el controlador B, el botón tendrá el título "Atrás".

Ben Call
fuente
1
Gracias querido @Ben. Eso era exactamente lo que estaba buscando :).
Arslan
12

El botón de retroceso 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 una RootViewControllerclase. Cuando hacemos clic en una celda en su vista de tabla, enviamos una instancia de SecondViewController. Queremos que el botón de retroceso de la SecondViewControllerinstancia diga "Inicio".

en el viewDidLoadmétodo de RootViewController.m :

self.title = @"Home";

en el viewDidLoadmé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 el botón de retroceso lea "Atrás", establezca el título del controlador de vista principal en @"Back";

Rosa Perrone
fuente
10

Esto funciona mejor para mí. Tratar :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Felipe FM Móvil
fuente
1
Gran respuesta funcionó a la perfección. debe marcarse como exceptuado.
Muhammad Rizwan
9

Si está utilizando el guión gráfico:

  1. Abrir StoryBoard
  2. En la ventana Esquema del documento, busque ViewController al que desea volver
  3. Haga clic en el elemento de navegación de ese ViewController
  4. En el explorador de atributos, cambie el valor del botón Atrás a su mosaico personalizado

Eso es todo, disfruta ...

AntonijoDev
fuente
5

Y en MonoTouch funciona lo siguiente (en ViewDidLoad del controlador principal):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);
BillF
fuente
3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

Esto funcionó para mí.

usuario1004911
fuente
3

En su controlador de vista principal, configure el botón Atrás cuando se cargue la vista:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Tenga en cuenta que no necesitamos incluir autorelease al final con la última versión de iOS.

¡Espero que esto ayude!

Zorayr
fuente
1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

Esto funciona para mi. Puede reemplazar "atrás" con otra cosa.

ohmer
fuente
Cuando responda con código, siempre explique cuál fue el problema con el código proporcionado y cómo su código soluciona el problema.
Lukas Knuth
1

¡Este me funcionó si no quieres tener un título!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
gpichler
fuente
1
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
usuario2783798
fuente
0

Finalmente supe por qué estas respuestas no me funcionaron al principio. Puse el título en el guión gráfico. Cuando configuro el título en el código. ¡funciona!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
usuario2547667
fuente
En el futuro, es posible que desee realizar publicaciones como esta como comentarios sobre la respuesta que no funcionó para usted.
Keith Smiley
0

Mi solución fue establecer el título cuando el controlador de vista se empuja a la pila de navegación y restablecerlo mediante el uso del método delegado antes de que se cierre vc:

Así que puse el cambio de título al llamar al controlador de vista cuando presiono el otro controlador de vista como:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

y en la función de devolución de llamada delegada (que invoco en viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}
Despotovic
fuente
0

Si no solo desea cambiar el texto del botón Atrás y mantener la forma de flecha izquierda original, 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
0

// Puede lograr esto configurando el título en el controlador de vista anterior como se muestra a continuación

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}
John Carto
fuente
0

Para cambiar el título del botón de retroceso, consulte el siguiente código

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`
Kiran K
fuente
0

En Swift5, el backBarButtom no se puede editar. Por lo tanto, primero debemos ocultar backBarButtom, luego usar un leftbarButtom personalizado para reemplazar backBarButtom. Aquí está la solución detallada: https://stackoverflow.com/a/63868300/13939003

Michael Lin Liu
fuente
-1

Esto funcionó para mí:

self.navigationController.navigationBar.topItem.title = "Back"
Rocoso
fuente