2011-08-30 16 views
19

Actualmente estoy intentando cambiar el texto del botón de retroceso de una subvista que está cargada de un tacto de celda de tabla. Sin embargo, incluso con la forma en que trato de implementarlo, aún muestra el título de los padres en el botón Atrás.Cómo cambiar el texto del botón de retroceso de uinavigationbar

estoy tratando de cargar un nuevo valor en el botón Atrás en el interior viewDidLoad método como tal

UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc] init]; 
myBarButtonItem.title = @"Back"; 
self.navigationItem.backBarButtonItem = myBarButtonItem; 
[myBarButtonItem release]; 

sin embargo no su trabajo.

+0

¿Esto se está realizando en el hilo principal? –

+0

Para ser sincero, no estoy seguro, no estoy seguro acerca de los hilos en el ios ... No estoy creando hilos según mi conocimiento si eso ayuda a responder su pregunta. –

+1

Pregunta duplicada. Vea esta respuesta: http://stackoverflow.com/a/4291832/1627732 – Yoga

Respuesta

0

Su código se ve bien hasta el momento.

¿Es este código ejecutado antes de que el

[super viewDidLoad]; 

declaración (mal) o después (bueno)?

+0

Lo estaba ejecutando después. –

1

No va a funcionar de la manera que estás tratando de hacer. El botón de navegación siempre tendrá el título de la vista previa. Sin embargo, lo que puedes hacer es cambiar el título de la primera vista antes de presionar la nueva. Este es el único que pude encontrar para resolver el mismo problema.

+1

y luego cuando vuelves tienes que cambiar tu título de nuevo ... esta es una solución horrible si es la única posibilidad ... los dedos cruzados allí es de otra manera. –

9

De acuerdo, lo he publicado, publiqué este código en el método padre viewView tableView: didSelectRowAtIndexPath :. así es como mi uno se ve con múltiples tablecells que el usuario puede seleccionar. Espero que esto ayude.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Navigation logic may go here. Create and push another view controller. 
    if (indexPath.section == 0) { //--- picks (first) section 

    ChildViewController *childViewController = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; 
    // ... 
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:childViewController animated:YES]; 
    //--- this sets the back button to "Back" every time you load the child view. 
    self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil] autorelease]; 

     if(indexPath.row == 0) { //--- picks row 
      childViewController.title = @"Bike"; 
     } 
     if(indexPath.row == 1) { 
      childViewController.title = @"Model"; 
     } 
     [vehicleSearchResponseTableViewController release]; 
    } 


} 
+0

Si tiene más de un controlador de vista en la pila, esta es la única solución que realmente funciona. Gracias. – Winston

-1

This article debe hacer lo que desee.

Del autor:

Como se puede ver arriba, todo lo que necesita hacer es establecer la leftBarButtonItem del controlador y se ocultará el botón de retroceso. El selector handleBack ahora maneja el evento de respaldo y usted necesita abrir manualmente el controlador de vista de la pila de UINavigationController. Puede implementar cualquiera de su propio código allí, incluso bloqueando salir de la página.

30

Necesita cambiar self.navigationItem.backBarButtonItem de la vista anterior, no la vista actual (lo sé, parece ser un poco ilógico). Por ejemplo, en la vista de tabla, puede hacer lo siguiente:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self setTitle:@"My title"]; 
    UIBarButtonItem *boton = [[UIBarButtonItem alloc] initWithTitle:@"Custom back button text" style:UIBarButtonItemStyleBordered target:self action:@selector(mySelector:)]; 
    self.navigationItem.backBarButtonItem = boton; 
    [boton release]; 
} 
+0

No si lo estaba escribiendo en español;) – Steven07

24

Aquí es donde la documentación no está tan claro hasta que haya leído y re-leer y jugar un poco con cada configuración.
Para cambiar el título de la espalda por defecto botón de añadir esta línea en viewDidLoad()

self.navigationController.navigationBar.topItem.title = @"Your Label"; 

Si desea que el botón sea invisible - a continuación, establece el valor en @"" cadena vacía.

+2

esto es un truco pero funciona si restablece el título del plumín anterior nuevamente cuando regresa a él –

+0

Downvoted. Teniendo en cuenta las otras opciones, esto no debe considerarse una solución viable. Si nos enfrentamos a una falta de control sobre cómo se comporta el botón Atrás, esto sería un truco aceptable, pero un truco aún. –

+0

The TopItem no siempre es un BackButton en un caso para mí el TopItem era el título de Ver –

-3

Una buena manera de hacer esto es para establecer el título del botón de retroceso en el controlador de vista de los padres antes de llamar al niño como éste:

[self.navigationItem.backBarButtonItem setTitle:@"Your Custom Title"]; 

Este título se colocará en el botón Atrás en el niño ver. El punto importante para llegar aquí es que este título se usa en la vista secundaria como el botón Atrás en la vista principal.

+0

Según su explicación, ¿no quiere decir [self.navigationItem setTitle: @ "..."] o incluso solo 'self.title' = @ "..." '? –

+1

Deje que self.navigationItem.backBarButtonItem predeterminado sea nulo, por lo que no puede cambiar el rito del botón Atrás usando esto. – Peter

2

La mejor manera con Xcode 5 para cambiar el nombre del botón de retroceso es editar el campo Botón Atrás en IB del Elemento de navegación en el Controlador de Vista al que devolverá el botón Atrás. Por ejemplo, si tiene una lista TableViewController que va a una pantalla de detalles, cambie el Botón Atrás en la lista TableViewController's Navigation item (en IB) para cambiar el nombre del botón Atrás que muestra la pantalla de detalles.

+0

Esta es la forma en que quieres hacerlo. Gracias Peter. – JVillella

0

Después viewDidLoad

self.navigationController! .navigationBar.backItem? .title = "Volver"

0

Mi sugerencia fue agregar una etiqueta separada a los padres Título de la página bar. Funcionó bien para mí.

let titleLabel = UILabel(frame: CGRect(x: (view.frame.width * (3/8)), y: 0, width: (view.frame.width * 0.25), height:30)) 
     titleLabel.text = "Title" 
     titleLabel.textAlignment = .center 
     titleLabel.textColor = UIColor.white 
     titleLabel.font = UIFont.systemFont(ofSize: 20) 
     navigationItem.titleView = titleLabel 
Cuestiones relacionadas