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?

AveragePro
quelle

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.

Greg
quelle
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.

ChrisP
quelle
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
Muzammil
quelle
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"];
Augustine PA
quelle
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

iAnkit
quelle
6

Erstellen IBOutletvonUINavigationBar

navigationBar.topItem.title = @"Title";

Hoffe das hilft.

Shyam
quelle
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.

Tod Cunningham
quelle
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!

Mike
quelle
1

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

_title = @"Title";

oder

self.title = @"Title";
Donmiller
quelle
0

Versuche dies,

self.navigationItem.title = @"Your title";
Kiran eldho
quelle
0

Dies habe ich in Swift 5 erreicht

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Title"
}
IMRAN RASHEED
quelle