Ich habe ein UIViewController
und navigiere von meinem ersten View-Controller zum zweiten View-Controller. Ich möchte den Namen der auf dem navigationcontroller
angezeigten Schaltfläche ändern, um zurückzukehren.
SecondViewController *secondController = [[SecondViewController alloc]
initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:secondController animated:YES];
jetzt im zweiten viewcontroller
möchte ich den Namen der Schaltfläche im navigationController
ändern.
In viewWillAppear schreibe dies
self.navigationItem.title = @"List View";
Und in ViewWilldisapper schreiben Sie dies
self.navigationItem.title = @"Back";
Es funktioniert ohne Storyboards.
Wenn Sie dies programmgesteuert tun möchten, können Sie dies folgendermaßen tun:
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem
Wenn Sie jedoch den Interface Builder bevorzugen, wählen Sie einfach das UINavigationItem aus, für das Sie die Schaltfläche "Zurück" festlegen möchten, und navigieren Sie zum Attributinspektor, um den Titel der Schaltfläche "Zurück" zu ändern.
HINWEIS: Beachten Sie, dass Sie dies auf dem View-Controller konfigurieren müssen, zu dem Sie beim Tippen auf die Schaltfläche "Zurück" zurückkehren würden, nicht auf dem aktuell sichtbaren View-Controller.
Es gibt eine einfache Möglichkeit, dies in Interface Builder oder Storyboarding zu tun. Setzen Sie im übergeordneten View Controller das Attribut "Zurück-Schaltfläche" des Navigationselements auf den gewünschten Titel. Hier ist ein Beispiel:
Villians Tavern-Ansicht hat "Zurück" als Titel für die Schaltfläche "Zurück", wie wir es gerade im Attributinspektor des Navigationscontrollers der Eltern (Beste Leisten) festgelegt haben.
Swift 3:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let backItem = UIBarButtonItem()
backItem.title = "Back"
navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}
Hinweis: Die Schaltfläche Zurück gehört zum vorherigen Ansichts-Controller und nicht zum aktuell auf dem Bildschirm angezeigten. Um die Zurück-Schaltfläche zu ändern, müssen Sie sie vor dem Drücken auf dem View-Controller, der den Übergang initiiert hat, aktualisieren:
In meinem Fall hat es nur geklappt, den Code im Haupt-Thread auszuführen:
dispatch_async(dispatch_get_main_queue(), ^(void) {
self.navigationController.navigationBar.backItem.title = @"Custom Title";
});
In Swift fand ich die Lösung sehr einfach,
Angenommen, ich bin auf ViewControllerA und gehe zu ViewControllerB. Wenn ich den Namen der Zurück-Schaltfläche ändern möchte, die auf ViewControllerB angezeigt wird, mache ich das in ViewControllerA,
self.title = "BackButtonTitle"
Das ist es.
Hinweis: - Dies ändert den Titel von ViewControllerA
Es ist sehr wichtig, dass in der Ansichtssteuerung die Option "Simulierte Metriken" nicht als "Abgeleitet" ausgewählt ist.
Ich habe es mit "None" versucht und alles ist in Ordnung!
Sie können dies erreichen, indem Sie titleView
von navigationItem
verwenden.
Schnelle 3 Antwort
• Erstellen Sie eine Erweiterung für UINavigationItem
(siehe unten)
extension UINavigationItem {
func customTitle(title: String) {
let titleLabel = UILabel()
titleLabel.text = title
titleLabel.textColor = UIColor.white
titleLabel.textAlignment = .center
titleLabel.sizeToFit()
titleView = titleLabel
}
}
• Führen Sie in Ihren Controllern viewDidLoad
die folgenden Schritte aus
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
title = "Text For Back Button"
navigationItem.customTitle(title: "Title for your view controller")
}
Versuchen Sie es wie folgt: -
NSArray *viewControllerArr = [self.navigationController viewControllers];
// get index of the previous ViewContoller
long previousViewControllerIndex = [viewControllerArr indexOfObject:self] - 1;
UIViewController *previous;
if (previousViewControllerIndex >= 0) {
previous = [viewControllerArr objectAtIndex:previousViewControllerIndex];
previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:nil];
}
Wenn Sie Storyboard-Referenzen verwenden, zeigt der View Controller möglicherweise das Navigationselement im Interface Builder nicht an.
Das manuelle Ziehen einer Navigationsleiste funktioniert nicht. Sie müssen ein Navigationselement ziehen
Anschließend können Sie den Titel des Zurück-Buttons festlegen. Hier legen Sie auch den Titel der Ansicht fest.
Zitat von Mick MacCallum:
HINWEIS: Beachten Sie, dass Sie dies auf dem View-Controller konfigurieren müssen, zu dem Sie beim Tippen auf die Schaltfläche "Zurück" zurückkehren würden, nicht auf dem aktuell sichtbaren View-Controller.
Versuchen Sie den folgenden Code:
[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];
Tatsächlich können Sie den Titel der Zurück-Schaltfläche ändern:
self.navigationItem.backBarButtonItem.title = @"NewName";
Hierfür gibt es zwei Möglichkeiten.
Der erste Weg ist per Programmcode:
Yakimenko Alekseys Antwort ist der einfachste Weg. Das funktioniert wirklich (getestet auf Xcode 8 + iOS 10).
Swift3:
self.navigationItem.backBarButtonItem?.title = "Your customized back title"
Hinweis: Sie sollten den obigen Code im Quellansichts-Controller aufrufen, nicht im Zielansichts-Controller.
Die zweite Möglichkeit ist die Verwendung der Storyboard-Lokalisierung über Main.strings
Datei,
"nnnnnnn.title" = "localized string";
Nnnnnnn bedeutet die Objekt-ID des BackBarButtonItem im View-Controller Quelle (nicht im Destination-View-Controller!)
Sie müssen die "Zurück" -Eigenschaft des Navigationsleistenelements festlegen. Es erstellt automatisch ein BarButtonItem. Sie finden die Objekt-ID.
Leider konnte ich keine Screenshots hochladen.
Wenn Sie Storyboard verwenden, gibt es eine einfache Möglichkeit, dies zu tun (es hat für mich gut funktioniert).
Ich bin auf ViewController1 und gehe zu ViewController2. Wenn ich den Namen der auf ViewController2 angezeigten Zurück-Schaltfläche ändern möchte, mache ich dies in ViewController2.
Swift 5
self.navigationController?.navigationBar.topItem?.title = "BackButtonTitle"
Ziel-C
self.navigationController.navigationBar.topItem.title = @"BackButtonTitle";
Ich hatte ein ziemlich komplexes Storyboard mit vielen Navigationssteuerungen, und mein Kunde wollte, dass alle Zurück-Schaltflächen "Zurück" sagten.
Im Interface Builder habe ich "Zurück" in das Feld "Zurück" jedes UINavigationItems eingefügt.
Ich habe nicht bei jedem Szenenwechsel gearbeitet!
Das Problem war, dass nicht jeder View Controller im Storyboard ein UINavigationItem hatte.
Ich habe dies behoben, indem ich ein neues UINavigationItem auf jeden UIViewController gezogen habe, der kein UINavigationItem hatte, und all der Felder der Schaltfläche Zurück auf "Zurück" gesetzt habe.
Achten Sie auf die Controller, denen nicht automatisch ein eigenes UINavigationItem zugewiesen wird.
Schnell 4
Stellen Sie in Ihrem IViewController Folgendes ein:
let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton