2010-07-29 16 views
7

En este momento, estoy configurando el título en viewDidLoad de la vista raíz de la pestaña, que solo cambia cuando hago clic en la pestaña. Quiero que esto se establezca antes de seleccionar la pestaña. He intentado algo así como:iPhone Objective-C: ¿Programativamente cambia el título del elemento de la barra de pestañas en la barra de pestañas creada con IB?

[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2] title] = @"string"; 

en la primera vista que se carga en otra pestaña, pero es evidente que algo malo ya que me sale un error operando de la izquierda.

¿Alguien puede mostrarme la forma correcta de lograr lo que estoy tratando de hacer?

Gracias!

Respuesta

3

Intente configurar el título en awakeFromNib en lugar de viewDidLoad. La vista para un controlador de vista no se carga hasta que no necesite la vista, y el controlador de la barra de pestañas de forma predeterminada no accede a la vista de un controlador de vista hasta que realmente lo seleccione (razón por la cual vio el cambio de título cuando seleccionó la tabla).

Dado que el plumín está creando el controlador de vista para comenzar (suponiendo que haya construido su controlador de barra de pestañas en IB) se llamará awakeFromNib tan pronto como se haya construido el controlador de vista, antes de que el controlador de barra de pestañas pueda preguntar qué título es.

+0

Whoa, eso funcionó como magia. Ni siquiera sabía que awakeFromNib era incluso una opción para los métodos viewController. (Aprendiendo algo nuevo todos los días!) ¡Gracias! –

+0

awakeFromNib es una opción para cualquier objeto cargado desde un plumín: el cargador de plumillas busca ese método en cualquier objeto que crea y lo llama si lo encuentra. Tenga en cuenta que si crea cosas a veces desde el xib y, a veces desde el código, también tendrá que anular el método initWithNibName :. –

4
[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2] title] = @"string"; 

La sintaxis es algo escasa aquí. Probablemente quería algo como:

[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2].title = @"string"; 

Sin embargo, eso no va a funcionar, ya que no hay title propiedad para establecer. De hecho, no hay manera de que vea cambiar el título de UITabBarItem una vez que se ha inicializado. Tendrá que usar el método de UITabBar para configurar todo el grupo de elementos a la vez. Pero no será divertido.

Apuesto a que esto sería una violación de Apple HIG, por lo que no hay una manera fácil de hacerlo con la API actual. Replantea tu diseño y pregúntate por qué quieres cambiar los nombres de las pestañas, lo que confundirá a tus usuarios.

+0

Gracias por su respuesta! Actualmente estoy compilando una aplicación con la API Foursquare, y noté que la aplicación Foursquare iPhone tiene uno de los nombres de las pestañas configurado con el nombre del usuario, por lo que me preguntaba cómo podrían haberlo hecho. –

+0

Probablemente lo hagan en la inicialización de UITabBar cuando se inicia la aplicación. –

Cuestiones relacionadas