2010-09-09 29 views
72

Mam aplikację paska kart z innym widokiem na każdej karcie. Każdy widok ma pasek UINavigationBar z zestawem tytułów w programie Interface Builder. Chcę zmienić tytuł na podstawie klauzuli w metodzie ViewDidLoad, więc jeśli x {zmień tytuł}.UINavigationBar - Ustaw programowo? iPhone SDK 4

Próbowałem self.title = @"title", które czytałem tutaj na Stackoverflow - ale to zmienia tytuł samego elementu paska kart.

Jak to zrobić?

Odpowiedz

185

mam ustawić tytuł programowo przy użyciu kodu coś takiego:

navBar.topItem.title = @"title"; 

gdzie NavBar jest zadeklarowana jako IBOutlet UINavigationBar związane z paska nawigacji w interfejsie konstruktora. To działało w mojej aplikacji; jednak nie używałem paska kart.

Jeśli navBar.topItem jest elementem paska tabulacji, nie widzę sposobu, aby zmienić tytuł, który pojawia się na pasku nawigacji, bez zmiany tytułu na pasku kart, ponieważ najwyższa wartość navBar i element paska karty to ten sam obiekt.

+2

Pracował doskonale wiedział, ja zapomniałem zrobić coś; i to było link IBINutlet UINavigationBar do samego paska. Tekst tytułowy i tabulacyjny są niezależne od siebie nawzajem. – AveragePro

+0

Jesteś pięknym mężczyzną, panie Greg! – SeniorShizzle

+0

To jest problem, gdy masz przycisk Wstecz zmienia tytuł przycisku Wstecz zamiast paska nawigacji, sprawdź odpowiedź z @CrisP. – clopez

66

Zastosowanie

self.navigationItem.title = @"the title"; 

jak ustawienie navBar.topItem.title nie będzie działać w każdych okolicznościach.

+2

Dziękuję ChrisP, to działa dla mnie. –

+3

NB może być używany tylko z UINavigationBar skojarzonym z kontrolerem widoku. From the docs ": Jest to unikalna instancja UINavigationItem stworzona do reprezentowania kontrolera widoku, gdy jest on wciśnięty na pasku nawigacji.Przy pierwszym uzyskaniu dostępu do tej właściwości tworzony jest obiekt UINavigationItem, dlatego nie należy uzyskiwać dostępu do tej właściwości, jeśli nie używasz kontrolera nawigacyjnego " – wuf810

2

użyłem następujące:

self.navigationController.navigationBar.topItem.title = @"Title"; 

Jednak miałem też nazwać to w bloku wysyłki, gdyż nie byłoby zmienić tytuł po nazwie w viewDidLoad w/o nim.

+5

Wspomniałeś, że również nazywasz to blokiem wysyłkowym - to powinno być zawarte w twoim eksformatowanym kodzie. –

6

Tworzenie IBOutlet o UINavigationBar

navigationBar.topItem.title = @"Title"; 

nadzieję, że to pomaga.

11

Jeśli klasa jest typem UIViewController, można ustawić tytuł zgodnie z metodą viewDidLoad.

[self setTitle:@"My Title"]; 
+0

To jest właśnie przyczyna jego problemu: zmienia również tytuł elementu paska tabulacji, co NIE zostało docenione. – Lepidopteron

24

Użyj tego:

CGRect navBarFrame = CGRectMake(0, 0, self.tableView.frame.size.width, 44.0); 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:navBarFrame]; 

    UINavigationItem *navItem = [UINavigationItem alloc]; 
    navItem.title = @"Your Title"; 

    [navBar pushNavigationItem:navItem animated:false]; 

[self.view addSubView:navBar]; 

lub

self.tableView.tableHeaderView = navBar; etc 
2

Należy zauważyć, że w postanowieniu tytuł, aby pokazać się wcale delegata panelu nawigacyjnego musi być ustawiony na pasku nawigacyjnym samej lub tytuł NIGDY nie pojawi się!

1

Można też po prostu ustawić tytuł w viewDidLoad pod ViewController lub TableViewController użyciu

_title = @"Title"; 

lub

self.title = @"Title"; 
0

Spróbuj tego,

self.navigationItem.title = @"Your title";