2012-04-24 15 views
5

Tworzę aplikację na iPhone'a i chcę wyświetlić logo w widoku tytułów na pasku nawigacyjnym. Zrobiłem podklasę UINavigationController i dodaje następującą linię w viewDidLoad:tytuł na pasku nawigacyjnym niewidoczny w widokach po septach

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

(może to wydawać się odpadów do tylko jednej linii, ale używam go w wielu miejscach i nie chcę aby użyć [wyglądu UINavigationBar] z różnych powodów)

To działa dobrze dla najbliższego dziecka kontrolera nawigacyjnego - widzę logo. Jednakże, kiedy przesuniemy segment do innego widoku, logo nie przenosi się, mimo że są one (według mojej najlepszej wiedzy) częścią "tego samego" kontrolera nawigacyjnego.

(dla porównania) -> MyNavigationController -> SomeViewController -> SomeOtherViewController

Próbowałem również wchodząc w viewDidLoad z SomeOtherViewController z:

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

To wciąż nie pokazuje się logo.

Po niektóre wywiercenie, odkryłem, że jeśli 1) nie mam tej linii w navigationcontroller za viewDidLoad i 2) Ja mam drugą linię w SomeOtherViewController za viewDidLoad, a następnie:

Start: Przedstawiamy SomeViewController . Brak loga. Kliknij, aby przesunąć segue: Logo pojawi się na pasku SomeViewController, zanim zniknie. Przeglądam teraz SomeOtherViewController: bez logo. Kliknij ponownie: Pasek nawigacyjny SomeViewController nadal ma logo.

Oczywiście nie rozumiem czegoś o działaniu kontrolera nawigacji. Czy ktoś może mi powiedzieć, jak to naprawić?

Odpowiedz

1

Jeśli dobrze rozumiem, można to zrobić również z innym podejściem i po prostu zastąpić cały obraz NavigationBar? Tam możesz umieścić swoją ikonę.

Ponieważ zmiana całego paska nawigacyjnego jest dość łatwa.

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

Ten kod należy umieścić w sposobie NavigationControllerviewDidLoad. Następnie powinien również pracować w ViewController, które naciskasz na stos kontrolera NavigationController.

0

Spróbuj użyć

self.navigationItem.titleView = yourCustomView; 

istead

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

i nie dotykać self.navigationController.navigationBar.topItem.titleView w ogóle. Najpierw próbowałem ustawić oba na yourCustomView, a mój niestandardowy widok pojawił się na ułamek sekundy, a potem zniknął Nie mam pojęcia, gdzie :)

Powiązane problemy