iPhone: Ustawianie tytułu paska nawigacji

87

Cześć wszystkim. Nadal jestem całkiem nowy w tworzeniu iPhone'a i mam trochę problemów ze zrozumieniem, jak zmienić tytuł mojego paska nawigacyjnego. W innym pytaniu na tej stronie ktoś zalecił użycie:

viewController.title = @"title text";

ale to nie działa dla mnie ... Czy muszę dodać UINavigationController, aby to osiągnąć? A może po prostu gniazdko z mojej podklasy UIViewController? Jeśli to pomoże, zdefiniowałem pasek nawigacji w IB i próbuję ustawić jego tytuł w mojej podklasie UIViewController. To kolejna z tych prostych rzeczy, która przyprawia mnie o ból głowy. Umieszczanie self.title = @ "tekst tytułu"; w viewDidLoadi initWithNibNameteż nie działał. Czy ktoś wie, co się dzieje i jak to zrobić, prawda?

Dzięki!

Arthur Skirvin
źródło

Odpowiedzi:

154

Kontroler widoku musi być elementem podrzędnym jakiegoś UINavigationController, aby .titlewłaściwość zaczęła obowiązywać. Jeśli UINavigationBar jest po prostu widokiem, musisz wypchnąć element nawigacyjny zawierający tytuł lub zmodyfikować ostatni element nawigacyjny:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

lub

bar.topItem.title = @"title text";
kennytm
źródło
8
Łał. Poważnie spędziłem ostatnią godzinę przeglądając fora i dokumentację, próbując to rozgryźć, i przekonałem się, że byłoby to bardziej złożone niż to. Ten kod jest tak prosty i nie musiałem niczego zmieniać w IB. Idealny! KennyTM, rządzisz. Jeśli dobrze pamiętam, odpowiedziałeś również na moje pytanie NSDate i skierowałeś mnie do szukania słowników. Jesteś moją nową ulubioną osobą na tej stronie. Wielkie dzięki za całą twoją pomoc!
Arthur Skirvin
5
Twój komentarz sprawił, że się uśmiechnąłem i zacząłem się zastanawiać: czy ktoś kiedykolwiek zaprzyjaźnił się tutaj w SO? zwykle wszyscy tutaj są bardzo pomocni, ale nie wydają się wyrażać żadnych ludzkich emocji (z wyjątkiem pytającego, oczywiście, gdy jest sfrustrowany)
maltalef
Zobacz odpowiedź Sorina na rozwiązanie kompatybilne ze scenorysami.
devios1
Dziękuję za odpowiedź, która naprawdę pozwoliła mi zaoszczędzić dużo czasu. :) @kennytm
jerry_sjtu
124

jeśli robisz to wszystko kodem w viewDidLoadmetodzie UIViewControllerto powinieneś tylko dodaćself.title = @"title text";

coś takiego:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

możesz też spróbować self.navigationItem.title = @"title";

sprawdź także, czy element navigationItem nie ma wartości null i jeśli ustawiłeś niestandardowe tło paska nawigacji, sprawdź, czy tytuł jest ustawiony bez niego.

Sorin Antohi
źródło
@ SorinA, dzięki. Jest to lepszy sposób nadania tytułu paska nawigacji.
Tirth
33

Jest jeden problem z używaniem self.title = @"title";

Jeśli używasz paska nawigacji razem z paskiem kart, powyższa linia zmienia również etykietę elementu paska kart. Aby tego uniknąć, skorzystaj z sugestii @testing

self.navigationItem.title = @"MyTitle";
Jigish
źródło
13

Jeśli chcesz zmienić tytuł paska nawigacyjnego (nie tytuł przycisku nawigacyjnego wstecz!), Ten kod będzie działał.

self.navigationController.topViewController.title = @"info";
M.Gökay Borulday
źródło
9

Jeśli chcesz zmienić tytuł navBar wewnątrz kontrolera tabBar, zrób to:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}
Pantelis Proios
źródło
viewDidAppear załatwił mi sprawę po 2 godzinach próby rozwiązania tego problemu. Dzięki :)
Tchelow
topItem.title może, ale nie musi, być tytułem paska nawigacji. Jeśli jest to ekran najwyższego poziomu bez przycisku Wstecz, ustawia tytuł. Ale jeśli masz przycisk Wstecz, topItem.title jest w rzeczywistości tytułem przycisku Wstecz.
user2962499
5

W mojej aplikacji nawigacyjnej robię to:

myViewController.navigationItem.title = @"MyTitle";
testowanie
źródło
4

Miałem kontrolery nawigacji zintegrowane z TabbarController. To zadziałało

self.navigationItem.title=@"title";
Sagar Dalwale
źródło
4

Domyślnie kontroler nawigacji wyświetla tytuł „elementu głównego”

więc w metodzie viewdidload Twojej delegowanej aplikacji możesz. Przetestowałem to i działa

navController.navigationBar.topItem.title = @"Test";
ronaldus_magnus
źródło
2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Ten kod zadziałał.

rmsh
źródło
Witamy w SO i dzięki za wiadomość. Lepiej postaraj się opublikować te informacje jako komentarz, zapoznaj się z Jak odpowiedzieć, aby uzyskać więcej informacji.
Serge Belov
2

Jeśli pracujesz ze scenorysami, możesz kliknąć kontroler, przejść do zakładki właściwości i ustawić tam tekst tytułu.

Chłopak
źródło
1

Myślę, że potrzebujesz dynamicznego tytułu, dlatego nie umieszczasz go w IB.

I zakładam, że twój obiekt viewController jest tym określonym w NIB?

Być może próbując ustawić go na wartość fikcyjną w IB, a następnie debugować metody, aby zobaczyć, który kontroler ma wartość fikcyjną - zakładając, że pojawia się jako tytuł ...

Chris Kimpton
źródło
1

Z poziomu TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Bla, bla, niesamowity tytuł";

OneInABajilian
źródło
1

Dla wszystkich twoich jerzyków, to zadziałało idealnie. To przede wszystkim jeden z krótszych sposobów na ustawienie tytułu:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
kbpontius
źródło