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.