UINavigationBar - Titel programmgesteuert festlegen?


77

Ich habe eine Registerkartenanwendung mit einer anderen Ansicht auf jeder Registerkarte. Jede Ansicht verfügt über eine UINavigationBar mit dem im Interface Builder festgelegten Titel. Ich möchte den Titel basierend auf einer Klausel in der ViewDidLoad-Methode ändern, also wenn x {Titel ändern}.

Ich habe es versucht self.title = @"title", aber dies ändert den Titel des Registerkartenleistenelements selbst.

Wie wird das gemacht?

Antworten:


203

Ich habe den Titel programmgesteuert mit Code wie folgt festgelegt:

navBar.topItem.title = @"title";

Dabei wird navBar als IBOutlet UINavigationBar deklariert, das mit der Navigationsleiste im Interface Builder verknüpft ist. Dies funktionierte in meiner App; Ich habe jedoch keine Registerkartenleiste verwendet.

Wenn navBar.topItem das Element in der Registerkartenleiste ist, können Sie den in der Navigationsleiste angezeigten Titel nicht ändern, ohne auch den Titel im Element in der Registerkartenleiste zu ändern, da sich das topItem und das Element in der Registerkartenleiste der navBar befinden das gleiche Objekt.


2
Arbeitete perfekt, wusste, dass ich vergessen hatte, etwas zu tun; und das war die Verknüpfung der IBOutlet UINavigationBar mit der Leiste selbst. Der Titel und der Tabulatortext sind übrigens unabhängig voneinander.
AveragePro

Dies hat ein Problem. Wenn Sie eine Schaltfläche "Zurück" haben, wird der Titel der Schaltfläche "Zurück" anstelle der Navigationsleiste geändert. Überprüfen Sie, ob @CrisP eine Antwort enthält.
Clopez

Die Frage bezog sich auf eine Ansicht mit einer UINavigationBar, die sich von einem UINavigationController unterscheidet, auf den Ansichtscontroller übertragen wurden. Die Antwort von ChrisP ist sicherlich die richtige Antwort im Kontext eines UINavigationControllers, jedoch nicht für den in der Frage diskutierten Fall.
Greg

1
self.navigationItem.title = @ "title"; Ich glaube, es ist der einfachste und einfachste Weg
Umit Kaya

73

Verwenden

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

Diese Einstellung navBar.topItem.titlefunktioniert nicht unter allen Umständen.


4
NB kann nur mit UINavigationBar verwendet werden, die einem View Controller zugeordnet ist. Aus den Dokumenten ": Dies ist eine eindeutige Instanz von UINavigationItem, die erstellt wurde, um den Ansichtscontroller darzustellen, wenn er auf eine Navigationsleiste verschoben wird. Wenn Sie zum ersten Mal auf diese Eigenschaft zugreifen, wird das UINavigationItem erstellt. Daher sollten Sie nicht auf diese Eigenschaft zugreifen, wenn Sie verwenden keinen Navigationscontroller "
wuf810

25

Benutze das :

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

oder

self.tableView.tableHeaderView = navBar; etc

11

Wenn es sich bei der Klasse um einen UIViewController-Typ handelt, können Sie den Titel wie in der viewDidLoad-Methode angegeben festlegen.

    [self setTitle:@"My Title"];

Dies ist genau das, was sein Problem verursacht hat: Es ändert auch den Titel des Registerkartenleistenelements, was NICHT gewürdigt wurde.
Lepidopteron

7

In ViewDidLoad Ihres ViewController.m schreiben Sie einfach,

self.navigationItem.title=@"Hello World";

Hier ist die Ausgabe:

Geben Sie hier die Bildbeschreibung ein


6

Erstellen IBOutletvonUINavigationBar

navigationBar.topItem.title = @"Title";

Hoffe das hilft.


3

Ich habe folgendes verwendet:

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

Ich musste es jedoch auch in einem Versandblock aufrufen, da es den Titel nicht ändern würde, wenn es in viewDidLoad ohne ihn aufgerufen würde.


7
Sie erwähnen, dass Sie es auch in einem Versandblock aufrufen. Dies sollte in Ihrem Beispielcode enthalten sein.
Luke Mcneice

2

Beachten Sie, dass der Delegierte des Navigationscontrollers auf die Navigationsleiste selbst eingestellt sein muss, damit der Titel überhaupt angezeigt wird. Andernfalls wird der Titel NIEMALS angezeigt!


1

Sie können den Titel auch einfach in ViewDidLoad unter Ihrem ViewController oder TableViewController mit festlegen

_title = @"Title";

oder

self.title = @"Title";


0

Dies habe ich in Swift 5 erreicht

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Title"
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.