2012-04-24 8 views
5

Estoy creando una aplicación de iPhone y me gustaría mostrar un logotipo en la posición de mi barra de navegación. He hecho una subclase de UINavigationController, y añadió la siguiente línea en viewDidLoad:vista de título en la barra de navegación no visible en las vistas después de los segmentos

self.navigationBar.topItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titlelogo.png"]]; 

(esto puede parecer una pérdida de sólo una línea, pero lo estoy usando en varios lugares y no quiero para usar [apariencia UINavigationBar] por varias razones)

Esto funciona bien para el hijo inmediato del controlador de navegación - Veo el logo. Sin embargo, cuando pulso segue a otra vista, el logotipo no se transfiere, aunque son (a mi leal saber y entender) parte del "mismo" controlador de navegación.

(para referencia) -> MyNavigationController -> SomeViewController -> SomeOtherViewController

también he tratado de entrar en el viewDidLoad de SomeOtherViewController con un:

self.navigationController.navigationBar.topItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titlelogo.png"]]; 

Esto todavía no muestra el logotipo.

Después de algún hurgando, he descubierto que si 1) no tengo esa línea en viewDidLoad del navigationcontroller y 2) que tienen la segunda línea en viewDidLoad del SomeOtherViewController, entonces:

de inicio: Viendo el SomeViewController . Sin logo. Haga clic para presionar segue: el logotipo ahora aparece en la barra de SomeViewController, antes de desaparecer. Ahora estoy viendo SomeOtherViewController: que no tiene logotipo. Haga clic en Atrás: la barra de navegación de SomeViewController todavía tiene el logotipo.

Obviamente no entiendo bien cómo funciona un controlador de navegación. ¿Alguien puede decirme cómo arreglar esto?

Respuesta

1

Si lo entiendo bien, también podría hacerlo con otro enfoque y simplemente reemplazar todo el NavigationBar con una imagen? Allí podrías colocar tu ícono.

Porque cambiar toda la barra de navegación es bastante fácil.

if ([self.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
    [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbar.png"] forBarMetrics:UIBarMetricsDefault]; 
} 

Este código tiene que poner en el método de la NavigationControllerviewDidLoad. Entonces también debería estar funcionando en ViewControllers que insertas en la pila del NavigationController.

0

intenta utilizar

self.navigationItem.titleView = yourCustomView; 

Istead de

self.navigationController.navigationBar.topItem.titleView = yourCustomView; 

y no toque self.navigationController.navigationBar.topItem.titleView en absoluto. Al principio traté de ponerlos a ambos en yourCustomView, y mi vista personalizada apareció por una fracción de segundo y luego desapareció. No tengo idea de dónde :)

Cuestiones relacionadas