So setzen Sie den Schaltflächentext in Swift zurück


207

Wie entferne ich den Text der Zurück-Schaltfläche?

Aktuelle Zurück-Taste:

<Zurück

Gewünschter Zurück-Button:

<Alles andere

Keines davon hat funktioniert:

self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title

Antworten:


604

Die Zurück-Schaltfläche gehört zum vorherigen Ansichts-Controller und nicht zu dem aktuell auf dem Bildschirm angezeigten.
Um die Zurück-Schaltfläche zu ändern, sollten Sie sie vor dem Drücken auf dem Ansichts-Controller aktualisieren , der den Übergang initiiert hat:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

Swift 3, 4 & 5:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

ODER

// in your viewDidLoad or viewWillAppear
navigationItem.backBarButtonItem = UIBarButtonItem(
    title: "Something Else", style: .plain, target: nil, action: nil)

9
Vielen Dank, Sie wissen nicht, wie viele Stunden ich nur für dieses kleine Detail (den vorherigen Controller) verbringe
Ricardo

3
Wenn ich eine Million Mal upvoten könnte, würde ich. Ich kann Ihnen nicht sagen, wie lange ich mich gefragt habe, warum es nicht funktioniert hat (war zuvor auf dem Ziel-Controller)
Dylan Ireland,

13
"Die Zurück-Schaltfläche gehört zum vorherigen Ansichts-Controller" ist die wertvollste Antwort, die ich zu diesem Thema gefunden habe! Danke dir!
Vhristoskov

1
Durch das Einstellen der titleÄnderungen wird der Titel geändert , nicht nur die Zurück-Schaltfläche.
Yariv Nissim

4
Ich habe self.navigationController .navigationBar.topItem .backBarButtonItem = backItem statt navigationItem.backBarButtonItem = backItem und es funktioniert gut auf Swift 3. Vielen Dank!
Indra Adam

125

Sie können dies vom Interface Builder aus wie folgt tun:

Klicken Sie auf das Navigationselement des vorherigen Ansichtscontrollers

Geben Sie hier die Bildbeschreibung ein

Stellen Sie im Attributinspektor den Text der Zurück-Schaltfläche auf den gewünschten Wert ein. Das ist es!!

Geben Sie hier die Bildbeschreibung ein


1
Was ist der beste Weg, um 'Null' zuzuweisen?
Kennydust

@ kennydust Meinst du leeren Titel?
Ajinkya Patil

8
@ Kennethydust ja in der Zurück-Schaltfläche fügen Sie Leerzeichen und drücken Sie die Eingabetaste
Ajinkya Patil

Schön und einfach, aber ist es lokalisierbar?
Gruntcakes

2
@ AjinkyaPatil Ich habe es versucht, aber die Schaltfläche Zurück wird nicht angezeigt. Gibt es einen Grund, warum dies sein kann?
user805981

48

Der Text der Zurück-Schaltfläche wird aus dem Titel des Navigationselements des übergeordneten View-Controllers übernommen. Was auch immer Sie im Titel des Navigationselements des vorherigen View-Controllers festgelegt haben, wird im Text der Zurück-Schaltfläche des aktuellen View-Controllers angezeigt. Sie können einfach "" als Titel für das Navigationselement in die viewWillAppear-Methode des übergeordneten View-Controllers einfügen.

self.navigationItem.title = ""

Ein anderer Weg ist zu setzen

self.navigationController?.navigationBar.topItem?.title = ""

in der viewWillAppear-Methode des aktuellen View Controllers. Dieser verursacht ein anderes Problem, wenn der Navigationsstapel zu verschachtelt ist.


5
self.navigationItem.title = "" sollte als beste Antwort oben stehen!
Rilar

Ich stimme dem als beste Antwort zu, da alle obigen Antworten das Hinzufügen einer Zielfunktion zum Navigationselement erfordern, sodass sie nicht nur den Text ändern, sondern auch eine benutzerdefinierte Pop-Funktion hinzufügen, die für die Frage nicht erforderlich ist!
IsPha

Dies funktioniert gut in prepareForSegue, was ist. ein wenig sauberer, weil Sie den neuen viewController nach dem Laden nicht ändern.
Adrian

Passt auf!!! Setzen Sie self.title = "....." vor den Aufruf von self.navigationItem.title = ""
Bary Levy

45

Sie können diese 3 Codezeilen in dasViewController Feld einfügen, in dem Sie den Titel der Zurück-Schaltfläche ändern möchten.

In deinem override func viewDidLoad() {}.

let backButton = UIBarButtonItem()
backButton.title = "My Back Button Title"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

2
Diese Lösung scheint korrekter zu sein, da Sie die Logik in die ankommende VC einfügen und nicht in die VC, die Sie verlassen. Aka: liest besser.
Eonist

37

Wenn Sie die xib-Datei für den View Controller verwenden, tun Sie dies in Ihrer View Controller-Klasse.

class AboutUsViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    edgesForExtendedLayout = []
    setUpNavBar()
}

func setUpNavBar(){
    //For title in navigation bar
    self.navigationController?.view.backgroundColor = UIColor.white
    self.navigationController?.view.tintColor = UIColor.orange
    self.navigationItem.title = "About Us"

    //For back button in navigation bar
    let backButton = UIBarButtonItem()
    backButton.title = "Back"
    self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}

}

Das Ergebnis wird sein:

Geben Sie hier die Bildbeschreibung ein


29

Ich weiß nicht, wo Sie Ihre Methoden verwendet haben, die Sie auf Ihre Frage gestellt haben, aber ich könnte das gewünschte Ergebnis erzielen, wenn ich für meine ViewControllerKlasse (in der ich den Zurück-Button ändern möchte) für die viewDidLoad()Funktion die folgende Zeile verwende:

self.navigationController?.navigationBar.backItem?.title = "Anything Else"

Das Ergebnis wird sein:

Vor

Geben Sie hier die Bildbeschreibung ein

Nach dem

Geben Sie hier die Bildbeschreibung ein


3
In meinem Fall hat es nur funktioniert, wenn Sie diesen Code auf die viewDidAppear-Methode und nicht auf die viewDidLoad-Methode setzen
apinho

2
Verwenden Sie navigationController.navigationBar.topItem?.title = ""stattdessen, um dies nicht zu vermeidenviewDidAppear
José

Dies scheint der zufriedenstellendste Weg zu sein und vermeidet einen Blitz, da der Titel der Zurück-Schaltfläche im aufrufenden Controller (langsamere Geräte) mit self.navigationItem.title = "" in "" geändert wird. Auch die andere Situation, in der self.navigationItem.title = "" vollständig ignoriert wird und zeitweise über einen Tab-Controller-Tab-Schalter programmgesteuert schnell in den View-Controller übergeht.
FlimFlam Vir

22

Die Zurück-Schaltfläche gehört zum vorherigen Ansichts-Controller und nicht zu dem aktuell auf dem Bildschirm angezeigten. Fügen Sie viewdidload hinzu, um die Zurück-Schaltfläche zu ändern, bevor Sie sie drücken.

Swift 4:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)

12

Sie können das Navigationselement einfach im Storyboard ändern

Geben Sie hier die Bildbeschreibung ein

Fügen Sie im Zurück-Button ein Leerzeichen hinzu und drücken Sie die Eingabetaste.

Hinweis: Tun Sie dies in der vorherigen VC.


8

Swift 4 - Konfigurieren Sie die Zurück-Taste, bevor Sie einen View Controller drücken

// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()

// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)

8

Das sollte funktionieren:

override func viewDidLoad() {
    super.viewDidLoad()

    var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
    self.navigationItem.backBarButtonItem = button

}

func goBack()
{
    self.navigationController?.popViewControllerAnimated(true)
}

Dies wird zwar nicht empfohlen, da dies tatsächlich den backButton ersetzt und auch den Zurückpfeil und die Wischgeste entfernt.


10
nicht der richtige Weg, es zu tun, Sie ersetzen nur den Zurück-Knopf
Yariv Nissim

Besser vom Interface Builder
Rutger Huijsmans

7

Swift 4.2

Wenn Sie den Elementtext der Navigationsleiste für die Schaltfläche "Zurück" ändern möchten, geben Sie diesen in viewDidLoadden Controller ein, bevor der Text angezeigt wird, in dem die Schaltfläche "Zurück" angezeigt wird, NICHT in der Ansichtssteuerung, in der die Schaltfläche "Zurück" sichtbar ist.

 let backButton = UIBarButtonItem()
 backButton.title = "New Back Button Text"
 self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

Wenn Sie den aktuellen Titeltext der Navigationsleiste ändern möchten, verwenden Sie den folgenden Code (beachten Sie, dass dies der Standardrücktext für die nächste Ansicht ist, die auf den Navigationscontroller übertragen wird, dieser Standardrücktext jedoch durch den obigen Code überschrieben werden kann).

 self.title = "Navigation Bar Title"

6

Es gibt zwei Möglichkeiten.

1.In der vorherigenViewController.viewDidLoad ()

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem

2.In der currentViewController.viewDidAppear ()

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"      
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem

Grund: Das backButtonkommt von navigationBar.backItem.backBarButtonItem, daher ist der erste Weg offensichtlich. In currentViewController.viewDidLoad () können wir die Referenz von nicht erhalten backItem, da in viewDidAppear () das auf seine. Pushed navigationBargedrückt wird, sodass wir Änderungen an dem in currentViewController vornehmen können. viewDidAppear ()navigationViewstackbackItem

Weitere Informationen finden Sie unter Dokument: UINavigationBar


3

Fügen Sie in der viewDidLoadMethode des präsentierenden Controllers Folgendes hinzu:

// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

2

Diese Antworten beheben zwar das Problem, aber dies könnte nützlich sein

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

2

Swift 4

Während das vorherige Sprichwort zur Vorbereitung auf das Segue korrekt ist und der Zurück-Button zum vorherigen VC gehört, fügt es nur eine Menge unnötigen Codes hinzu.

Am besten legen Sie den Titel der aktuellen VC in viewDidLoad fest und der Titel der Zurück-Schaltfläche wird bei der nächsten VC automatisch korrekt festgelegt. Diese Linie hat bei mir funktioniert

navigationController?.navigationBar.topItem?.title = "Title"

2

Dies funktioniert für Swift 5 :

self.navigationItem.backBarButtonItem?.title = ""

Bitte beachten Sie, dass dies für den nächsten Push-View-Controller wirksam ist, nicht für den aktuellen auf dem Display. Deshalb ist es sehr verwirrend!

Überprüfen Sie auch das Storyboard und wählen Sie das Navigationselement des vorherigen Ansichts-Controllers aus. Geben Sie dann etwas in die Schaltfläche Zurück (Inspektor) ein.


1

Versuchen Sie dies ... es wird funktionieren ...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    self.title = ""
}

Der obige Code blendet den Text aus und zeigt nur den Zurückpfeil in der Navigationsleiste an.


0

self.title = "" Vorher einstellen self.navigationController?.pushViewController(vc, animated: true).


0
override func viewWillAppear(_ animated: Bool) {

    self.tabBarController?.navigationItem.title = "Notes"

    let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))

    self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}

func goToNoteEditorViewController(){
   // action what you want
}

Ich hoffe es hilft!! #swift 3


0

Wenn Sie einen View Controller von der Seite des Page View Controllers verschieben, können Sie den Titel der Zurück-Schaltfläche des Navigationscontrollers nicht aktualisieren. Um dies zu lösen, erstellen Sie einen Delegaten zurück zu Ihrem übergeordneten Ansichtscontroller (möglicherweise können Sie auch die Ansichtscontrollerhierarchie zurück zum übergeordneten Ansichtscontroller durchlaufen).

Darüber hinaus haben Zurück-Schaltflächen eine Zeichenbeschränkung. Wenn Sie diese Zeichenbegrenzung überschreiten, wird das System standardmäßig auf "Zurück" gesetzt. Es wird für Sie nicht abschneiden. Beispielsweise:

backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.

0

Swift 4

In meinem Fall bestand die Lösung darin, das Navigationselement des Master View Controllers zu löschen, bevor Sie zum Child View Controller wechseln. Und stellen Sie es erneut ein, wenn es erneut angezeigt wird

MasterController

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.title = ""
}

Und so drücke ich einen UIViewController und lösche das Element der hinteren Leiste im untergeordneten Controller:

MasterController

let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)

0

für Swift 4.2

let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem

0

GOTCHA: Wenn Sie Probleme mit einem der mit vielen Sternen ausgezeichneten Vorschläge haben, stellen Sie sicher, dass Sie Ihre UITableViewCells registrieren viewDidLoad(), nicht voninit()


-1

Lösung überprüft und in Swift 5 arbeiten

Im Folgenden habe ich einige Lösungen für verschiedene Fälle aufgeführt:

1. Entfernen Sie den Text von der Zurück-Schaltfläche

Die beste Lösung zum Entfernen von Text von der Zurück-Schaltfläche ist das Hinzufügen von viewDidLoad ():

navigationItem.backBarButtonItem = UIBarButtonItem()

2. Legen Sie den eigenen Text auf der Zurück-Schaltfläche fest

Wenn Sie Ihren eigenen Titel festlegen möchten, legen Sie den Titel von backButton fest:

let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem

3. Leeren Sie die Zurück-Taste auf allen VC

Wenn Sie einen gemeinsamen Stil in der gesamten App erstellen möchten, um nur einen Pfeil ohne Text zurück zu haben, erstellen Sie eine Basis-VC für alle Ihre View Controller:

class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

Mit der oben vorgestellten Lösung können Sie die Zurück-Schaltfläche in Zukunft anpassen, wenn Sie später eine Ausnahme machen möchten, indem Sie eine zusätzliche Variable hinzufügen und diese in einem bestimmten ViewController überschreiben, z.

class BaseViewController: UIViewController {

    var customBackButtonTitle: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        var backButton = UIBarButtonItem()
        if let text = customBackButtonTitle {
            backButton.title = text
        }
        navigationItem.backBarButtonItem = backButton
    }
}

-2

schnell 4

Es gibt eine Möglichkeit, Text in backButton programmgesteuert vom aktuellen viewController aus zu ändern:

navigationController?.navigationBar.items![0].title = "some new text"
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.