2010-09-09 18 views
72

Tengo una aplicación de barra de pestañas con una vista diferente en cada pestaña. Cada vista tiene una UINavigationBar con el título establecido en Interface Builder. Estoy queriendo cambiar el título basado en una cláusula en el método ViewDidLoad, así que si x {cambia el título}.UINavigationBar - ¿Establecer el título mediante programación? iPhone SDK 4

He intentado self.title = @"title", que leo aquí en Stackoverflow, pero esto cambia el título del elemento de la barra de pestañas.

Entonces, ¿cómo se hace esto?

Respuesta

185

He puesto el título mediante programación utilizando el código de algo como esto:

navBar.topItem.title = @"title"; 

donde navBar se declara como un IBOutlet UINavigationBar vinculada a la barra de navegación en el constructor de interfaces. Esto funcionó en mi aplicación; sin embargo, no estaba usando una barra de pestañas.

Si navBar.topItem es el elemento de la barra de pestañas, no veo la forma de cambiar el título que aparece en la barra de navegación sin cambiar también el título en la barra de pestañas, ya que el elemento superior de navBar y el el elemento de la barra de pestañas es el mismo objeto.

+2

funcionó a la perfección, sabía que me había olvidado de hacer algo; y eso fue vincular IBOutlet UINavigationBar a la barra en sí. El título y el texto de la pestaña son independientes entre sí, por cierto. – AveragePro

+0

¡Eres un hombre hermoso, Sr. Greg! – SeniorShizzle

+0

Esto tiene un problema, cuando tiene un botón Atrás, cambia el título del botón Atrás en lugar de la barra de navegación, compruebe la respuesta de @CrisP. – clopez

66

Uso

self.navigationItem.title = @"the title"; 

como el establecimiento navBar.topItem.title no funcionará en todas las circunstancias.

+2

Gracias ChrisP, esto funciona para mí. –

+3

NB solo se puede usar con UINavigationBar asociado con un controlador de vista. From the docs ": esta es una instancia única de UINavigationItem creada para representar el controlador de vista cuando se inserta en una barra de navegación. La primera vez que accede a esta propiedad, se crea el UINavigationItem. Por lo tanto, no debe acceder a esta propiedad si no está usando un controlador de navegación " – wuf810

2

que utilizó la siguiente:

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

Sin embargo, también tuve que llamarlo en un bloque de despacho, ya que no cambiaría el título cuando se le llama en el viewDidLoad w/o ella.

+5

Menciona que también lo llama en un bloque de despacho: esto debe incluirse en su código de Exmaple. –

6

Crear IBOutlet de UINavigationBar

navigationBar.topItem.title = @"Title"; 

Espero que esto ayude.

11

Si la clase es un tipo de UIViewController, puede establecer el título como se indica en el método viewDidLoad.

[self setTitle:@"My Title"]; 
+0

Esto es justo, lo que estaba causando su problema: también cambia el título del elemento de la barra de pestañas, lo cual NO fue apreciado. – Lepidopteron

24

Utilice esta:

CGRect navBarFrame = CGRectMake(0, 0, self.tableView.frame.size.width, 44.0); 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:navBarFrame]; 

    UINavigationItem *navItem = [UINavigationItem alloc]; 
    navItem.title = @"Your Title"; 

    [navBar pushNavigationItem:navItem animated:false]; 

[self.view addSubView:navBar]; 

o

self.tableView.tableHeaderView = navBar; etc 
2

Tenga en cuenta que para que el título aparece en absoluto delegado del controlador de navegación deberá ser fijado a la barra de navegación sí mismo o ¡el título NUNCA se mostrará!

1

También se puede simplemente establecer el título en el viewDidLoad bajo su ViewController o TableViewController usando

_title = @"Title"; 

o

self.title = @"Title"; 
4

En viewDidLoad de su ViewController.m acaba de escribir,

[email protected]"Hello World"; 

Aquí está la salida:

enter image description here

0

probar esto,

self.navigationItem.title = @"Your title"; 
Cuestiones relacionadas