2012-04-24 8 views
5

Sto facendo un'applicazione per iPhone e vorrei visualizzare un logo nella posizione titleview della mia barra di navigazione. Ho fatto una sottoclasse di UINavigationController e ha aggiunto la seguente riga nel viewDidLoad:titleview sulla barra di navigazione non visibile in viste dopo segues

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

(questo può sembrare uno spreco di una sola riga, ma io sto usando in più posti e io non voglio per utilizzare [UINavigationBar aspetto] per vari motivi)

Questo funziona correttamente per il bambino immediato del controller di navigazione - Vedo il logo. Tuttavia, quando passo a un'altra vista, il logo non viene trasferito, anche se sono (per quanto ne so) parte dello "stesso" controller di navigazione.

(per riferimento) -> MyNavigationController -> SomeViewController -> SomeOtherViewController

Ho anche provato ad andare in viewDidLoad di SomeOtherViewController con un:

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

Questo ancora non mostra il logo.

Dopo un po 'rovistando, ho scoperto che se 1) non ho quella linea nel viewDidLoad del navigationController e 2) ho la seconda linea in viewDidLoad del SomeOtherViewController, quindi:

Inizio: Visualizza SomeViewController . Nessun logo Fare clic per inserire il seguito: il logo viene ora visualizzato sulla barra di SomeViewController, prima di scomparire. Ora sto visualizzando SomeOtherViewController: che non ha logo. Clic indietro: la barra di navigazione di SomeViewController ha ancora il logo.

Ovviamente sto fraintendendo qualcosa su come funziona un controller di navigazione. Qualcuno può dirmi come risolvere questo problema?

risposta

1

Se ho capito bene si potrebbe anche farlo con un altro approccio e basta sostituire l'intero NavigationBar con un'immagine? Lì potresti posizionare la tua icona.

Perché cambiare l'intero NavigationBar è abbastanza semplice.

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

Questo codice è necessario mettere nel metodo della navigationControllerviewDidLoad. Quindi dovrebbe funzionare anche in ViewControllers che si mettono sullo stack del NavigationController.

0

tenta di utilizzare

self.navigationItem.titleView = yourCustomView; 

istead di

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

e non toccare self.navigationController.navigationBar.topItem.titleView affatto. All'inizio ho provato a impostare entrambi su yourCustomView e la mia vista personalizzata è apparsa per una frazione di secondo e poi non c'era più idea di dove :)

Problemi correlati