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!

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";

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.


@ 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";

13

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

self.navigationController.topViewController.title = @"info";

9

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

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}

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";

4

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

self.navigationItem.title=@"title";

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";

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

Ten kod zadziałał.


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.


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ł ...


1

Z poziomu TableViewController.m:

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


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"
  }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.