iPhone: Einstellen des Titels der Navigationsleiste

86

Hey alle zusammen. Ich bin noch ziemlich neu in der iPhone-Entwicklung und habe Probleme, herauszufinden, wie ich den Titel meiner Navigationsleiste ändern kann. Bei einer anderen Frage auf dieser Website hat jemand empfohlen:

viewController.title = @"title text";

aber das funktioniert bei mir nicht ... Muss ich einen UINavigationController hinzufügen, um dies zu erreichen? Oder vielleicht nur eine Steckdose aus meiner UIViewController-Unterklasse? Wenn es hilft, habe ich die Navigationsleiste in IB definiert und versuche, den Titel in meiner UIViewController-Unterklasse festzulegen. Dies ist eine weitere dieser einfachen Sachen, die mir Kopfschmerzen bereiten. Putting self.title = @ "title text"; in viewDidLoadund initWithNibNamehat auch nicht funktioniert. Weiß jemand, was passiert und wie man es richtig macht?

Vielen Dank!

Arthur Skirvin
quelle

Antworten:

154

Der Ansichtscontroller muss ein untergeordnetes Element eines UINavigationControllers sein, damit die .titleEigenschaft wirksam wird. Wenn die UINavigationBar lediglich eine Ansicht ist, müssen Sie ein Navigationselement mit dem Titel verschieben oder das letzte Navigationselement ändern:

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

oder

bar.topItem.title = @"title text";
kennytm
quelle
8
Beeindruckend. Ich habe die letzte Stunde ernsthaft damit verbracht, in Foren und Dokumentationen zu stöbern, um dies herauszufinden, und ich hatte mich davon überzeugt, dass es komplexer sein würde. Dieser Code ist so einfach und ich musste nichts in IB neu fummeln. Perfekt! KennyTM, du rockst. Wenn ich mich recht erinnere, haben Sie auch meine NSDate-Frage beantwortet und mich dazu gebracht, Wörterbücher zu recherchieren. Sie sind meine neue Lieblingsperson auf dieser Seite. Vielen Dank für all Ihre Hilfe!
Arthur Skirvin
5
Ihr Kommentar brachte mich zum Lächeln und zum Staunen: Hat jemals jemand hier in SO jemals Freunde gefunden? Normalerweise ist jeder hier sehr hilfsbereit, scheint aber keine menschlichen Gefühle auszudrücken (außer dem Fragesteller natürlich, wenn er / sie frustriert ist)
Maltalef
In Sorins Antwort finden Sie eine Storyboard-kompatible Lösung.
Devios1
Vielen Dank für Ihre Antwort, die mir sehr viel Zeit spart. :) @kennytm
jerry_sjtu
123

Wenn Sie alles mit Code in der viewDidLoadMethode von tun, UIViewControllersollten Sie nur hinzufügenself.title = @"title text";

etwas wie das:

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

Sie könnten es auch versuchen self.navigationItem.title = @"title";

Überprüfen Sie auch, ob Ihr Navigationselement nicht null ist und ob Sie einen benutzerdefinierten Hintergrund für die Navigationsleiste festgelegt haben, ob der Titel ohne diesen Hintergrund festgelegt ist.

Sorin Antohi
quelle
@ SorinA, danke. Dies ist der bessere Weg, um den Titel der Navigationsleiste anzugeben.
Tirth
33

Es gibt ein Problem bei der Verwendung self.title = @"title";

Wenn Sie die Navigationsleiste zusammen mit der Registerkartenleiste verwenden, ändert die obige Zeile auch die Bezeichnung für das Registerkartenleistenelement. Um dies zu vermeiden, verwenden Sie die Vorschläge von @testing

self.navigationItem.title = @"MyTitle";
Jigish
quelle
12

Wenn Sie den Navbar-Titel ändern möchten (nicht den Titel der Navbar-Zurück-Schaltfläche!), Funktioniert dieser Code.

self.navigationController.topViewController.title = @"info";
M. Gökay Borulday
quelle
9

Wenn Sie den Titel einer navBar in einem tabBar-Controller ändern möchten, gehen Sie folgendermaßen vor:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}
Pantelis Proios
quelle
viewDidAppear hat den Trick für mich gemacht, nachdem ich 2 Stunden lang versucht hatte, dies herauszufinden. Danke :)
Tchelow
topItem.title kann der Titel der Navigationsleiste sein oder nicht. Wenn es sich um den Bildschirm der obersten Ebene ohne Zurück-Schaltfläche handelt, wird der Titel festgelegt. Wenn Sie jedoch eine Zurück-Schaltfläche haben, ist topItem.title tatsächlich der Titel der Zurück-Schaltfläche.
user2962499
5

In meiner navigationsbasierten App mache ich Folgendes:

myViewController.navigationItem.title = @"MyTitle";
testen
quelle
4

Ich hatte einen Navigationscontroller in einen TabbarController integriert. Das hat funktioniert

self.navigationItem.title=@"title";
Sagar Dalwale
quelle
4

Standardmäßig zeigt der Navigationscontroller den Titel des 'Topitems' an.

So können Sie in Ihrer viewdidload-Methode Ihres appdelegate. Ich habe es getestet und es funktioniert

navController.navigationBar.topItem.title = @"Test";
ronaldus_magnus
quelle
2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Dieser Code hat funktioniert.

rmsh
quelle
Willkommen bei SO und danke für den Beitrag. Es ist besser, diese Informationen als Kommentar zu veröffentlichen. Weitere Informationen finden Sie unter Antworten .
Serge Belov
2

Wenn Sie mit Storyboards arbeiten, können Sie auf den Controller klicken, zur Registerkarte Eigenschaften wechseln und dort den Titeltext festlegen.

Kerl
quelle
1

Ich denke, Sie brauchen einen dynamischen Titel, deshalb setzen Sie ihn nicht in IB.

Und ich nehme an, Ihr viewController-Objekt ist das in der NIB angegebene?

Vielleicht versuchen Sie es auf einen Dummy-Wert in IB zu setzen und debuggen dann die Methoden, um zu sehen, welcher Controller den Dummy-Wert hat - vorausgesetzt, er erscheint als Titel ...

Chris Kimpton
quelle
1

In Ihrem TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Blah blah Some Amazing title";

OneInABajilian
quelle
1

Für alle Ihre Swift-da draußen hat das perfekt für mich funktioniert. Dies ist insbesondere eine der kürzeren Möglichkeiten, um den Titel festzulegen:

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
quelle