Derzeit ist der Standardwert für die Schaltfläche in der linken Leiste der Titel der Ansicht, in die die aktuelle geladen wurde, dh die Ansicht, die beim Drücken der Schaltfläche angezeigt werden soll (Zurück-Schaltfläche).
Ich möchte den auf der Schaltfläche angezeigten Text in etwas anderes ändern.
Ich habe versucht, die folgende Codezeile in die viewDidLoad-Methode des View Controllers einzufügen, aber es scheint nicht zu funktionieren.
self.navigationItem.leftBarButtonItem.title = @"Log Out";
Was soll ich machen?
Vielen Dank.
-viewDidLoad:
In ChildVC hat das bei mir funktioniert ...
Funktioniert auch in Swift!
quelle
Hier ist die Dokumentation für backBarButtonItem :
View Controller A (der "übergeordnete" View Controller):
Befindet sich ein anderer Ansichts-Controller B oben auf dem Navigationsstapel und A direkt darunter, hat die Zurück-Schaltfläche von B den Titel "Kurz" .
quelle
In Xcode 4.5 mit Storyboard ist die bei weitem einfachste Lösung, die ich gefunden habe, wenn sich der Wert der Schaltfläche "Zurück" nicht dynamisch ändern muss, die Verwendung des Felds "Zurück", das dem Navigationselement des View Controllers zugeordnet ist, zu dem Sie gehören möchte, dass die Schaltfläche "Zurück" etwas anderes sagt.
Beispiel: Im folgenden Screenshot möchte ich, dass die Schaltfläche "Zurück" für die View-Controller, die ich drücke, "Zurück" als Titel der Schaltfläche "Zurück" hat.
Dies funktioniert natürlich nicht, wenn Sie die Zurück-Taste benötigen, um jedes Mal etwas anderes zu sagen. Dafür gibt es hier alle anderen Lösungen.
quelle
Ich weiß, die Frage ist sehr alt, aber ich habe eine schöne Lösung gefunden.
Funktioniert von childView! Getestet mit iOS 7.
quelle
Vielleicht bin ich zu simpel, aber aus Apples Dokumentation lautet der Wortlaut:
Die oben als korrekt gekennzeichnete Lösung legt ein Standardschaltflächenelement vom übergeordneten Controller fest. Es ist die richtige Antwort, aber ich
self.title
löse das Problem, indem ich die Eigenschaften des UIViewControllers ändere, bevor ich den neuen Controller auf den NavigationController-Stapel schiebe.Dadurch wird der Titel der Zurück-Schaltfläche auf dem nächsten Controller automatisch aktualisiert. Solange Sie
self.title
auf den gewünschten Wert zurücksetzen,viewWillAppear
kann ich nicht sehen, dass diese Methode zu viele Probleme verursacht.quelle
Das funktioniert besser für mich. Versuchen :
quelle
In Swift / iOS8 hat Folgendes für mich funktioniert:
Portiert aus Felipes Antwort.
quelle
self.navigationController?.navigationBar.topItem?.backBarButtonItem
Ok, hier ist der Weg. Wenn Sie einen View Controller "first" haben und einen anderen View Controller "second" durch Drücken einer Taste usw. navigieren, müssen Sie einige Arbeiten ausführen. Zuerst müssen Sie ein BarButtonItem in der ViewDidLoad-Methode des "zweiten" View Controllers wie folgt erstellen.
Nachdem Sie dies getan haben, müssen Sie in den Code für die Aktion "btnBack" in dieselbe .m-Datei wie diese schreiben.
Das ist alles.
quelle
leftBarButtonItem
hat nicht das Aussehen von abackBarButtonItem
, wenn dies für das Anwendungsdesign wichtig ist.Ich hatte einen übergeordneten Ansichts-Controller mit einem sehr langen Titel. Dies führte dazu, dass der Text der Zurück-Schaltfläche in den Titel des untergeordneten Ansichts-Controllers blutete.
Nachdem ich eine Reihe verschiedener Lösungen ausprobiert hatte, habe ich Folgendes getan (Erweiterung des @ john.k.doe-Ansatzes):
Verwenden von Xcode 7.2, Swift 2
Navigation Item
der übergeordneten View Controller-Szene eine hinzu (nicht die untergeordnete VC).Attributes Inspector
auf Ihrem neuen FeldNavigation Item
einspace
Zeichen einBack Button
. Dazu später mehr.Ausschnitt:
Erläuterung:
Die Zurück-Schaltfläche gehört zum übergeordneten Ansichts-Controller. Das
Navigation Item
gibt Ihnen ein Handle für die Zurück-Schaltfläche, sodass Sie den Titel im Code oder im Storyboard festlegen können.Hinweis:
Wenn Sie den
Navigation Item
Back Button
Text als leere Standardzeichenfolge belassen, wird der Titel der Zurück-Schaltfläche zu "Zurück".Andere Ansätze funktionieren, warum diesen verwenden?:
Während es möglich ist, den Titel der Zurück-Schaltfläche auf dem untergeordneten Ansichts-Controller zu überschreiben, war es eine Herausforderung, ihn in den Griff zu bekommen, bis er bereits kurz auf dem Bildschirm blinkte.
Einige der Ansätze erstellen eine neue Zurück-Schaltfläche und überschreiben die vorhandene. Ich bin sicher, dass es funktioniert und wahrscheinlich in einigen Anwendungsfällen notwendig ist. Ich bevorzuge es jedoch, vorhandene APIs zu nutzen, wenn dies möglich ist.
Das Ändern
title
des übergeordneten Ansichtscontrollers ist in einigen Situationen die schnellste Lösung. Dadurch wird jedoch der übergeordnete Titel geändert, sodass Sie den Status verwalten müssen. Es wird auch chaotisch mit einem,Tab Bar Controller
weil Titeländerungen Nebenwirkungen bei denTab Bar Item
Titeln verursachen.quelle
Wenn Sie Storyboards verwenden, wählen Sie einfach den übergeordneten Controller-Frame (nicht den mit der Zielansicht) aus (klicken Sie mit der rechten Maustaste auf die Navigationsleiste und öffnen Sie den Attributinspektor, in dem Sie drei Formulareingaben finden. Die dritte " Zurück-Taste "ist, dass wir suchen.
quelle
Schnelle Version:
In Ihrem Kind ViewController:
quelle
Hier ist eine andere Möglichkeit, dies zu tun.
Implementieren Sie in Ihrem übergeordneten Ansichtscontroller die folgende Methode:
Wenn Sie in Ihrem untergeordneten Ansichts-Controller den Titel ändern möchten, funktioniert dies wie folgt:
Ich konnte die
parentViewController
Immobilie nie zum Laufen bringen :Ich weiß nicht, ob das ein Fehler ist oder ob ich ihn nicht richtig benutze. Das Ergreifen des vorletzten Ansichtscontrollers im
viewControllers
Array zeigt jedoch auf den übergeordneten Ansichtscontroller, und ich kann übergeordnete Methoden mit dieser Referenz korrekt aufrufen.quelle
OK. Ich persönlich hasste all diese Optionen. Deshalb habe ich mir meine eigenen ausgedacht.
Basierend auf den Informationen, die ich gesehen habe. Es scheint, dass der Controller für die vorherige Ansicht die Kontrolle über seine eigene Schaltfläche "Zurück" hat, die auf dem Controller für die Push-Ansicht angezeigt wird.
Ich habe eine Lazy Load-Methode für das Navigationselement auf dem Controller erstellt, die den geänderten Zurück-Button verwenden möchte.
Meins ist ein Invite Buyer Controller
Käufer einladen ist der standardmäßig festgelegte Text.
Die Schaltfläche "Zurück" musste jedoch "Einladen" sein
Hier ist der Code, mit dem ich die Schaltfläche "Zurück" erstellt habe.
Ich habe diesen Code oben in die Implementatio (.m) -Datei des Controllers eingefügt und er hat die Methode des Super automatisch überschrieben.
Ich denke, dies ist ein viel eleganterer Weg, um dies zu erreichen.
Ich platziere diesen Code an einer Stelle und er wird bei Bedarf automatisch ausgefüllt.
Sie müssen den Code nicht vor jeder Push-Anforderung aufrufen.
Hoffe das hilft
quelle
quelle
Hier ist die Antwort:
In
viewDidAppear:animated
(NICHT inviewDidLoad
) gehen Sie wie folgt vorDas, wenn Sie die Form des Zurück-Buttons beibehalten möchten.
quelle
Keine der hier erläuterten Lösungen hat bei mir funktioniert. Also habe ich den Titel folgendermaßen aus der Szene entfernt, aus der ich gekommen bin:
self.title = @"";
Wenn also eine neue Szene präsentiert wird, erscheint der hintere Text nicht.
Ich stimme absolut zu, dass dies überhaupt keine klare Lösung ist, aber funktioniert hat und keine der Erklärungen für mich funktioniert hat.
quelle
Ich habe festgestellt, dass es am besten ist, den Titel des aktuellen Ansichts-Controllers im Navigationsstapel in den gewünschten Text der Zurück-Schaltfläche zu ändern, bevor Sie zum nächsten Ansichts-Controller wechseln.
Zum Beispiel
Setzen Sie dann in viewDidAppear den Titel auf den gewünschten Titel für die ursprüngliche VC zurück. Voila!
quelle
Für Swift:
quelle
Ich habe festgestellt, dass der einfachste Weg, den Namen der Zurück-Schaltfläche zu ändern, darin besteht, den Titel des Ansichts-Controllers auf den Titel der Zurück-Schaltfläche zu setzen und dann die titleView im Navigationselement des Ansichts-Controllers durch eine benutzerdefinierte Bezeichnung durch eine echte zu ersetzen Name.
So was:
CustomViewController.m
Dadurch sieht Ihr Titel in UINavigationBar so aus, als wäre er nativ. Geben Sie dem Ansichts-Controller die Möglichkeit, Titel und Zurück-Schaltflächentitel zu trennen.
Im Fall der Ansichtssteuerungen A und B ist A dafür verantwortlich, festzulegen, wie die Zurück-Schaltfläche aussehen soll, während B angezeigt wird.
BEARBEITEN: Dadurch wird auch das native Erscheinungsbild der Zurück-Schaltfläche beibehalten (Element der linken Pfeilschaltfläche).
quelle
Dieser Code funktioniert auch. Stellen Sie dies auf den Root-Controller des Navigations-Controllers:
quelle
Ich bin neu in iOS, aber ich werde meine sehr einfache Antwort auf das Überschreiben der Navigationscontroller-Klasse geben. Ich habe einfach die Push- und Pop-Methoden überschrieben und den Titel des vorherigen Ansichts-Controllers gespeichert. Entschuldigung für das Einfügen in js Block. War wenig verwirrt, wie man es im normalen Codeblock einfügt.
quelle
self.navigationController.navigationBar.backItem.title = @"TEXT";
Und in Swift:
quelle
Sie können es beliebig in den Code im parrent-Controller einfügen, sodass Sie unterschiedliche Backbuttons für verschiedene untergeordnete Ansichten haben können.
quelle
Bei den meisten Lösungen wird der ursprüngliche Stil von BackButton (die Schaltfläche mit dem linken Pfeil) aufgehoben, während eine übliche Schaltfläche mit dem gewünschten Titel hinzugefügt wird. Um
den ursprünglichen Stil beizubehalten, gibt es zwei Möglichkeiten:
1. Den undokumentierten Schaltflächenstil (110 oder ähnliches) zu verwenden, den ich lieber nicht mache. Wenn Sie möchten, finden Sie hier im Stackoverflow eine Anleitung.
2. Um die Idee von Trenskow zu verwenden. Mir hat es gefallen und ich benutze es etwas verändert.
Anstatt den Titel (NSString *) zu überschreiben, habe ich beschlossen, den Originaltitel folgendermaßen beizubehalten (wodurch ich die Titel der Feder sowie den angegebenen Titel übrigens im Push-Status verwenden kann).
Diese Lösung funktioniert gut und sieht nativ aus. Auch wenn es in der viewDidLoad-Methode verwendet wird, wird die Ausführung mehr als einmal verhindert.
Ich habe auch eine Jessedc-Lösung ausprobiert, aber sie sieht schlecht aus. Es bewirkt, dass die Titelleiste des Benutzers im Handumdrehen vom Original zum gewünschten und zurück von BackButton wechselt.
quelle
Dies funktioniert für mich als "vereinfachte" Version der zuvor veröffentlichten Antworten.
Denken Sie daran, den Code in den übergeordneten Ansichtscontroller einzufügen (z. B. die Ansicht mit Ihrer Tabellenansicht oder UITableViewController), nicht die untergeordnete Ansicht oder Detailansicht (z. B. UIViewController) einzufügen.
Sie können die Zeichenfolge der Zurück-Schaltfläche einfach wie folgt lokalisieren:
quelle
Wir haben zwei VCs A und B.
Wenn Sie den Titel in B ändern möchten, schreiben Sie diesen Code in A.
Swift 4.1 Xcode 9.4
quelle
Stans Antwort war die beste. Es gibt jedoch auch ein Problem: Wenn Sie den Controller mit einer Registerkartenleiste verwenden und den Titel des Controllers ändern, können Sie auch den Titel der Registerkartenleiste ändern. Die beste Antwort ist also, nur den Titel view_controller.navigationItem.title zu ändern und view_controller.navigationItem zu verwenden .titel in der Funktion. Die Antwort ist hier: (Mit ARC und fügen Sie sie in viewDidLoad der Ansicht ein)
Bei meiner Verwendung mache ich es zu einer Funktion wie dieser, habe nur die Funktion mit einem Zeilencode in viewDidLoad.
quelle
Wenn Sie nicht nur den Text der Schaltfläche "Zurück" in denselben Text ändern und die ursprüngliche Form des linken Pfeils beibehalten möchten , sondern auch etwas tun möchten, wenn der Benutzer auf die Schaltfläche " Zurück " klickt, empfehlen wir Ihnen, sich in meinem " CustomNavigationController " umzuschauen. .
quelle
PROBLEM: "Zurück" -Text in der Navigationsleiste kann nicht ersetzt werden.
GRUND: Die Bezeichnung "Zurück" wird in der Navigationsleiste nach dem Drücken einer Ansicht festgelegt, da das Attribut .title im übergeordneten Ansichtscontroller auf Null gesetzt (oder nicht initialisiert) wurde.
EINE LÖSUNG: Wenn Sie self.title = "Whatever ..." setzen, wird nach dem Drücken des neuen Ansichts-Controllers anstelle von "Back" "Whatever ..." angezeigt.
quelle