Programmgesteuertes Ändern des Navigationstitels


186

Ich habe eine Navigationsleiste mit einem Titel. Wenn ich auf den Text doppelklicke, um ihn umzubenennen, heißt es tatsächlich, dass es sich um ein Navigationselement handelt.

Ich versuche, den Text mithilfe von Code zu ändern, z.

declare navigation bar as navagationbar here
button stuff {
    navigationbar.text = "title"
}

Das ist offensichtlich nicht mein Code, sondern zeigt nur, wie es funktionieren würde.

Wenn ich also die Taste drücke, soll sich der Titel ändern.

Antworten:


535

Sie ändern den Titel, indem Sie den Titel des angezeigten Ansichts-Controllers ändern :

viewController.title = "some title"

Normalerweise erfolgt dies in der Ansicht, die auf dem Ansichtscontroller geladen wurde:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "some title"
}

Dies funktioniert jedoch nur, wenn Sie Ihren View Controller in einen UINavigationController eingebettet haben. Ich empfehle dringend , dies zu tun, anstatt selbst eine Navigationsleiste zu erstellen. Wenn Sie darauf bestehen, selbst eine Navigationsleiste zu erstellen, können Sie den Titel folgendermaßen ändern:

navigationBar.topItem.title = "some title"

1
ViewController.type hat kein Mitglied mit dem Namen title. Das ist der Fehler, den ich bekomme.
Steigend

2
Sie nennen es nicht direkt in der Klasse. Sie nennen es auf einer Instanz einer Unterklasse von UIViewController
drawag

Ja, ViewControllerbezieht sich auf die Klasse selbst. Sie müssen auf eine Instanz von verweisen ViewController. Innerhalb einer Methode in Ihrer Klasse, z. B. viewDidLoadkönnen Sie dies mit verwenden self. Wenn Sie den Unterschied zwischen einer Klasse und einer Instanz nicht kennen, empfehle ich Ihnen dringend, zu lernen, was es ist. Dieser Artikel wird helfen.
Drawag

Funktioniert auch in Xcode wie ein Zauber. Nur eine kleine Änderung -> self.title = @ "some title";
Zusammenfassung

self.title = "irgendein Titel" hat bei mir funktioniert. Danke ! Ich habe versucht, 'navigationController? .NavigationItem.title = "Irgendein Titel". wirklich nicht sicher, warum es nicht funktioniert. (Ich habe dort ein Navigationselement, das ich zusätzlich zum eingebetteten Navigationscontroller platziert habe, um den Titel anzuzeigen.) Ich denke immer noch, dass es funktionieren sollte, weiß aber nicht warum. Stapelüberlauf zur Rettung noch einmal!
Naishta


13

Der folgende Code funktioniert für mich mit Xcode 7:

override func viewDidLoad() {        
    super.viewDidLoad()
    self.navigationItem.title = "Your Title"
}

10

Ich fand das funktioniert:

navigationItem.title = "Title"

Wie zentriert man den Titel in einem View Controller, der einem UINavigationController untergeordnet ist? Aus irgendeinem Grund ist der Text nach links ausgerichtet. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy

5

und auch wenn Sie versuchen, Navigation Barmanuell zu erstellen , hilft Ihnen dieser Code

func setNavBarToTheView() {
    let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 64.0))
    self.view.addSubview(navBar);
    let navItem = UINavigationItem(title: "Camera");
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(CameraViewController.onClickBack));
    navItem.leftBarButtonItem = doneItem;
    navBar.setItems([navItem], animated: true);
}

4

Normalerweise ist es die beste Vorgehensweise, den Titel auf dem zu setzen UIViewController. Auf diese Weise UINavigationItemwird auch das eingestellt. Im Allgemeinen ist dies besser als das programmgesteuerte Zuweisen und Initialisieren von Daten UINavigationBar, die mit nichts verknüpft sind.

Sie verpassen einige der Vorteile und Funktionen, für die das entwickelt UINavigationBarwurde. Hier ist ein Link zu der Dokumentation, die Ihnen helfen kann. Es werden die verschiedenen Eigenschaften erläutert, die Sie in der tatsächlichen Leiste und in einem festlegen können UINavigationItem.

Denken Sie daran:

  1. Sie verlieren die Funktionalität der Zurück-Taste (es sei denn, Sie verdrahten sie selbst).
  2. Die integrierte Geste "Ziehen von der linken Seite zum Zurückwischen" verfällt

UINavigationControllersind deine Freunde.


4

Die richtige Antwort für Benutzer wäre

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your Text"
}

3

Swift 3

Ich habe eine Steckdose für das Navigations-Titelleistenelement erstellt, das mit der Navigationsleiste (über den Objektbrowser) im Storyboard geliefert wird. Dann habe ich die folgende Zeile verklagt:

navigationBarTitleItem.title = "Hello Bar"

2

Wenn Sie den Titel eines untergeordneten Ansichts-Controllers eines in einen Navigations-Controller eingebetteten Seitenansichts-Controllers ändern möchten, sieht dies folgendermaßen aus:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}

1

Wenn Sie eine NavigationControllereingebettete Innenseite haben, TabBarControllersiehe unten:

super.tabBarController?.title = "foobar"

Geben Sie hier die Bildbeschreibung ein

Sie können solche Probleme mit Debugger-Skripten debuggen. Versuchen Sie den pvc Befehl von Chisel , um jede sichtbare / verborgene Ansicht in der Hierarchie zu drucken.


0

In Swift 4:

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Ich hoffe es hilft, Grüße!


2
Dies ist nur die Hälfte der akzeptierten Antwort. Wenn Sie sagen, dass sich nichts geändert hat, warum sollten Sie dann etwas posten?! Bitte löschen.
Eric Aya

@Moritz bist du Moderator oder so? Wenn Sie "Ja" sagen, werde ich es löschen. Wenn nicht, werde ich es nicht löschen.
Radames E. Hernandez

1
Sagst du es wirklich? Über mir gibt es 4 völlig gleiche Antworten. Warum kommst du dann mit mir und sagst mir, ich soll meine löschen? Ich bin ein vertrauenswürdiger Benutzer, der die Community unterstützt. Ich gehe nicht nur herum und wiederhole Antworten. Ich wollte diese Frage nur mit einer aktualisierten schnellen Version aktualisieren.
Radames E. Hernandez

3
Ihre Antwort enthält keine Aktualisierung. Dies ist der gleiche Code wie die akzeptierte Antwort, der Teil "Normalerweise wird dies in Sicht ausgeführt" wurde geladen ...
Eric Aya

0

Ich bevorzuge die Verwendung von self.navigationItem.title = "Your Title Here"over self.title = "Your Title Here", um den Titel in der Navigationsleiste bereitzustellen, da die Registerkartenleiste auch self.titlezum Ändern des Titels verwendet wird. Sie sollten den folgenden Code einmal ausprobieren.

Hinweis: Das Aufrufen des Super View-Lebenszyklus ist erforderlich, bevor Sie Aufgaben ausführen.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupNavBar()
    }
}

private func setupNavBar() {
    self.navigationItem.title = "Your Title Here"
}

0

Swift 5.1

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "What ever you want"
}

0

Swift 5.1

// NavigationBar-Titel programmgesteuert und dynamisch festlegen

Hinweis: Fügen Sie zuerst NavigationControllerItem zu Your hinzu, gehen Sie ViewControllerdann zu deren ViewController.swiftDatei und kopieren Sie diese und fügen Sie sie ein viewDidLoad().

navigationItem.title = "Your Title Here"

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.