iPhone: configuración del título de la barra de navegación

87

Oigan todos. Todavía soy bastante nuevo en el desarrollo de iPhone y tengo algunos problemas para averiguar cómo cambiar el título de mi barra de navegación. En otra pregunta de este sitio, alguien recomendó usar:

viewController.title = @"title text";

pero eso no me funciona ... ¿Necesito agregar un UINavigationController para lograr esto? ¿O tal vez solo una salida de mi subclase UIViewController? Si ayuda, definí la barra de navegación en IB y estoy tratando de establecer su título en mi subclase UIViewController. Esta es otra de esas cosas simples que me dan dolor de cabeza. Poniendo self.title = @ "texto del título"; en viewDidLoady initWithNibNametampoco funcionaba. ¿Alguien sabe lo que está pasando y cómo hacer que suceda, verdad?

¡Gracias!

Arthur Skirvin
fuente

Respuestas:

154

El controlador de vista debe ser un elemento secundario de algún UINavigationController para que la .titlepropiedad surta efecto. Si UINavigationBar es simplemente una vista, debe insertar un elemento de navegación que contenga el título o modificar el último elemento de navegación:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

o

bar.topItem.title = @"title text";
Kennytm
fuente
8
Guau. Pasé seriamente la última hora navegando a través de foros y documentación tratando de resolver esto, y me convencí de que sería más complejo que esto. Este código es muy simple y no tuve que volver a manipular nada en IB. ¡Perfecto! KennyTM, eres genial. Si mal no recuerdo, también respondió mi pregunta NSDate y me puso a buscar diccionarios. Eres mi nueva persona favorita en este sitio. ¡Muchas gracias por toda su ayuda!
Arthur Skirvin
5
tu comentario me hizo sonreír y preguntarme: ¿alguien alguna vez hizo amigos aquí en SO, alguna vez? por lo general todo el mundo aquí es muy útil, pero no parece expresar las emociones humanas (excepto el autor de la pregunta, por supuesto, cuando él / ella está frustrado)
maltalef
Vea la respuesta de Sorin para una solución compatible con guiones gráficos.
devios1
Gracias por tu respuesta que realmente me ha ahorrado mucho tiempo. :) @kennytm
jerry_sjtu
124

si lo está haciendo todo por código en el viewDidLoadmétodo del UIViewController, solo debe agregarself.title = @"title text";

algo como esto:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

también podrías intentar self.navigationItem.title = @"title";

También verifique si su navigationItem no es nulo y si ha configurado un fondo personalizado para la barra de navegación, verifique si el título está configurado sin él.

Sorin Antohi
fuente
@ SorinA, Gracias. Es la mejor forma de dar el título de la barra de navegación.
Tirth
33

Hay un problema con el uso self.title = @"title";

Si está utilizando la barra de navegación junto con la barra de pestañas, la línea anterior también cambia la etiqueta del elemento de la barra de pestañas. Para evitar esto, use lo que sugirió @testing

self.navigationItem.title = @"MyTitle";
Jigish
fuente
13

Si desea cambiar el título de la barra de navegación (¡no el título del botón de retroceso de la barra de navegación!), Este código funcionará.

self.navigationController.topViewController.title = @"info";
M.Gökay Borulday
fuente
9

Si desea cambiar el título de un navBar dentro de un controlador tabBar, haga esto:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}
Pantelis Proios
fuente
viewDidAppear hizo el truco para mí después de 2 horas tratando de resolver esto. Gracias :)
Tchelow
topItem.title puede ser o no el título de la barra de navegación. Si es la pantalla de nivel superior sin botón de retroceso, establecerá el título. Pero si tiene un botón de retroceso, topItem.title es en realidad el título del botón de retroceso.
user2962499
5

En mi aplicación basada en navegación, hago esto:

myViewController.navigationItem.title = @"MyTitle";
pruebas
fuente
4

Tenía controladores de navegación integrados en un TabbarController. Esto funcionó

self.navigationItem.title=@"title";
Sagar Dalwale
fuente
4

De forma predeterminada, el controlador de navegación muestra el título del 'elemento superior'

entonces en su método viewdidload de su appdelegate puede. Lo probé y funciona

navController.navigationBar.topItem.title = @"Test";
ronaldus_magnus
fuente
2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Este código funcionó.

rmsh
fuente
Bienvenido a SO y gracias por la publicación. Será mejor que publique esta información como un comentario, eche un vistazo a Cómo responder para obtener más información.
Serge Belov
2

Si está trabajando con Storyboards, puede hacer clic en el controlador, cambiar a la pestaña de propiedades y establecer allí el texto del título.

Chico
fuente
1

Supongo que necesitas un título dinámico, por eso no lo configuras en IB.

¿Y supongo que su objeto viewController es el especificado en el NIB?

Tal vez intente establecerlo en un valor ficticio en IB y luego depure los métodos para ver qué controlador tiene el valor ficticio, asumiendo que aparece como el título ...

Chris Kimpton
fuente
1

Desde dentro de su TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Blah blah Un título increíble";

OneInABajilian
fuente
1

Para todos sus Swift-ers, esto funcionó perfectamente para mí. Es notablemente una de las formas más cortas de lograr establecer el título, también:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
kbpontius
fuente