2013-05-16 11 views
9

Mam aplikację na iOS, na której znajduje się kontroler nawigacyjny jako kontroler główny, ale z jednej strony znajduje się pasek kart do wyboru między widokami w jednym z pasków nawigacji. Wygląda podobnie do aplikacji iTunes (pasek nawigacji u góry, pasek kart u dołu). Chcę zmienić tytuł paska nawigacyjnego na podstawie wybranej karty. Mam dwie osobne pliki kontrolerów dla każdej karty. Oto, co starałem się wykorzystać w każdy tak daleko, aby to naprawić bezskutecznie:Zmień tytuł paska nawigacyjnego na podstawie wybranej karty?

self.navigationItem.title = @"Title"; 
self.navigationController.navigationItem.title = @"title"; 
[self.navigationController setTitle:@"Live"];  
[self setTitle:@"Top Title"]; 

Jak mogę zmienić tytuł NavBar podstawie której karta jest wciśnięty?

Odpowiedz

18

Zmieniasz tytuł paska w kontroler widoku, który jest aktualnie wyświetlany.

Tak na przykład w widoku kontrolera A że jesteś pokazano w kontrolerze zakładki, można dodać:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES]; 
    [self setTitle:@"A"]; 
    self.tabBarController.navigationItem.title = @"A"; 
} 

samo dotyczy B, C, itd

+0

Kiedy próbuję tej metody, ustawia tytuł zakładki, do której kontroler jest podłączony, na "A" – DCIndieDev

+0

Zobacz poprawioną odpowiedź. –

+0

Znów ten sam problem. ustawia tytuł paska karty na A, a nie tytuł paska nawigacji. Jeśli ponownie przeczytałeś moje pytanie, napisałem, że próbowałem tych 3 metod. – DCIndieDev

3

W swoim ViewControllers że są w zakładkach:

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.tabBarController.title = self.title; 
} 
2

Jeżeli poszczególne kontrolery widoku przedstawione przez kontroler kreskowego Zakładka mają własne paski nawigacyjne, a następnie

[self setTitle:@"Foo"]; 

ustawi zarówno etykietę paska zakładek, jak i tytuł paska nawigacji.

Jeśli kontroler nawigacyjny jest na najwyższym poziomie (czyli pasek kart znajduje się wewnątrz kontrolera nawigacji), to może trzeba ustawić tytuł bar nawigacyjnego ręcznie (i będziemy chcieli to zrobić w viewDidAppear zamiast viewDidLoad , ponieważ te kontrolery dziecko nie są przeładowane każdym włączeniu), np:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self.navigationController.navigationBar.topItem setTitle:@"Foo"]; 
} 

Alternatywnie, można zrobić to dostosowanie napisów paska nawigacji w swojej metodzie didSelectViewControllerUITabBarControllerDelegate.

Jeśli tego nie zrobi, być może trzeba będzie wyjaśnić swoje pytanie, opisując hierarchię kontrolerów (np. Kontroler paska kart na pasku nawigacyjnym lub na odwrót).

1

Można podklasy UITabBarController ustawić delegata do siebie i używać delegata ustawić swój tytuł, gdy kontroler widoku jest wybrany:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    //change the title based on viewController that is selected 
    self.title = @"New title"; 
} 
+0

Osobiście wolę takie podejście. – Lapinou

1

zaledwie dwie linie Code..Only rzeczą jest, ty trzeba użyć viewWillAppear metody

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.tabBarController.navigationItem.title = @"Your Title"; 
} 

PS: Zainspirowany znad odpowiedzi ...

0
UITabBarController *tabController = (UITabBarController *)self.parentViewController; 

tabController.navigationItem.title = @"ABC"; 

To działa na mnie

Od jakiegoś R & D w internecie

Trzeba zdać navigationItem górę łańcucha. Klawisz UINavigationController wyświetla element navigationItem należący do jego topViewController, który jest UITabBarController. UITabBarController pokazuje tytuły nawigacjiItem w swoich zakładkach. Więc co trzeba zrobić, to upewnić się, że TabBarController za navigationItem jest to selectedViewController za navigationItem

Przypomnę więc:

tytułowej UINavigationController = topViewController.navigationItem.title

UITabBarController tabTitle = selectedViewController .navigationItem.title

UIViewKontroler title = navigationItem.title