Derzeit ist der Standardwert für die linke Balkenschaltfläche der Titel der Ansicht, mit der die aktuelle geladen wurde, dh die Ansicht, die beim Drücken der Schaltfläche angezeigt werden soll (Schaltfläche "Zurück").
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.
Dies sollte in der Methode platziert werden, die den ViewController mit dem Titel "NewTitle" . Aufruft. Direkt vor der Anweisung Push oder popViewController.
UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@"NewTitle"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];
In ChildVC hat das für mich funktioniert ...
self.navigationController.navigationBar.topItem.title = @"Back";
Funktioniert auch in Swift!
self.navigationController!.navigationBar.topItem!.title = "Back"
Hier ist die Dokumentation für backBarButtonItem :
"Wenn sich dieses Navigationselement unmittelbar unter dem obersten Element im Stack befindet, leitet der Navigationscontroller die Zurück-Schaltfläche für die Navigationsleiste von diesem Navigationselement ab. [...] Wenn Sie Angeben möchten Wenn Sie ein benutzerdefiniertes Bild oder einen benutzerdefinierten Titel für die Zurück-Schaltfläche verwenden, können Sie stattdessen dieser -Eigenschaft einen benutzerdefinierten Balkenschaltflächen-Eintrag (mit Ihrem benutzerdefinierten Titel oder Bild) zuweisen. "
View Controller A (der "parent" view controller):
self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
Wenn sich ein anderer Ansichtscontroller B auf dem Navigationsstapel befindet und A direkt darunter ist, hat der Zurück-Button von B den Titel "Kurz".
in Xcode 4.5 mit Storyboard ist die einfachste Lösung, die ich gefunden habe, wenn sich der Wert der Schaltfläche Zurück nicht dynamisch ändern muss, das Feld "Zurück", das mit dem Navigationselement des View Controllers verknüpft ist, zu dem Sie gehören möchte, dass die Schaltfläche "Zurück" etwas anderes sagt.
z.B. In der Abbildung unten möchte ich die Schaltfläche "Zurück" für die View Controller, die ich drücke, um "Zurück" als Titel der Schaltfläche "Zurück" zu verwenden.
dies funktioniert natürlich nicht, wenn Sie die Zurück-Taste benötigen, um jedes Mal etwas anderes zu sagen. Hierfür gibt es alle anderen Lösungen.
Ich weiß, die Frage ist sehr alt, aber ich habe eine schöne Lösung gefunden.
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;
Funktioniert von childView! Mit iOS 7 getestet.
Vielleicht bin ich zu simpel, aber aus der Dokumentation von Apple lautet der Wortlaut:
Wenn von einem der View-Controller kein custom bar-Schaltflächenelement angegeben wird, wird ein Standard-Zurück-Button verwendet und der Titel wird auf den Wert der title-Eigenschaft des vorherigen View-Controllers gesetzt Der View-Controller befindet sich eine Ebene tiefer auf dem Stapel.
Die als richtig gekennzeichnete Lösung legt ein Standardschaltflächenelement vom übergeordneten Controller fest. Es ist die richtige Antwort, aber ich löse das Problem, indem Sie die self.title
-Eigenschaft des UIViewControllers direkt ändern, bevor Sie den neuen Controller auf den NavigationController-Stack schieben.
Dadurch wird automatisch der Titel der Zurück-Schaltfläche auf dem nächsten Controller aktualisiert. Solange Sie self.title
wieder auf den Wert in viewWillAppear
setzen, kann ich nicht feststellen, dass diese Methode zu viele Probleme verursacht.
In Swift/iOS8 funktionierte Folgendes für mich:
let backButton = UIBarButtonItem(
title: "Back Button Text",
style: UIBarButtonItemStyle.Bordered,
target: nil,
action: nil
);
self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;
Portiert von Felipes Antwort.
Das funktioniert besser für mich. Versuchen :
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Ok, hier ist der Weg. Wenn Sie einen View-Controller "first" haben und mit einem Knopfdruck usw. einen anderen View-Controller "second" navigieren, müssen Sie einige Arbeit verrichten. Zuerst müssen Sie ein BarButtonItem in der ViewDidLoad-Methode des "zweiten" View-Controllers wie folgt erstellen.
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(OnClick_btnBack:)];
self.navigationItem.leftBarButtonItem = btnBack;
[btnBack release];
Nachdem Sie das getan haben, müssen Sie in die gleiche .m-Datei wie folgt in den Code für die Aktion "btnBack" schreiben.
-(IBAction)OnClick_btnBack:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
//[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}
Das ist alles.
Ich hatte einen übergeordneten View-Controller mit einem wirklich langen Titel. Dies führte dazu, dass der hintere Schaltflächentext im Titel des untergeordneten Ansichtscontrollers blutete.
Nachdem ich eine Reihe verschiedener Lösungen ausprobiert hatte, habe ich das am Ende getan (erweitert auf den Ansatz @ john.k.doe):
Verwendung von Xcode 7.2, Swift 2
Navigation Item
hinzu (nicht den untergeordneten VC).Attributes Inspector
Ihres neuen Navigation Item
ein space
-Zeichen in das Feld Back Button
ein. Mehr dazu später.schnipsel:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
switch segue.destinationViewController {
case is ChildViewController:
navigationItem.backBarButtonItem?.title = ""
default:
navigationItem.backBarButtonItem?.title = "Full Parent Title"
}
}
Erklärung:
Die Schaltfläche "Zurück" gehört zum übergeordneten View-Controller. Der Navigation Item
gibt Ihnen einen Griff an die Zurück-Schaltfläche, damit Sie den Titel im Code oder im Storyboard festlegen können.
Hinweis:
Wenn Sie den Text Navigation Item
Back Button
als leere Standardzeichenfolge belassen, wird der Titel der Zurück-Schaltfläche "Zurück".
Andere Ansätze funktionieren, warum verwenden Sie diese ?:
Es ist zwar möglich, den Back-Button-Titel auf dem Child-View-Controller zu überschreiben, es war jedoch eine Herausforderung, einen Griff darauf zu bekommen, bis er bereits kurz auf dem Bildschirm blinkt.
Einige Ansätze konstruieren einen neuen Zurück-Button und überschreiben den vorhandenen. Ich bin sicher, dass es funktioniert und in einigen Anwendungsfällen wahrscheinlich notwendig ist. Ich ziehe es vor, vorhandene APIs zu nutzen, wenn dies möglich ist.
Das Ändern der title
des übergeordneten View-Controllers ist in manchen Situationen die schnellste Lösung. Dies ändert jedoch den übergeordneten Titel, so dass Sie den Status verwalten müssen. Mit Tab Bar Controller
wird es auch unordentlich, weil Titeländerungen bei den Tab Bar Item
-Titeln Nebenwirkungen verursachen.
Wenn Sie Storyboards verwenden, wählen Sie einfach den übergeordneten View-Controller-Frame (nicht den, der die Zielansicht enthält) (klicken Sie mit der rechten Maustaste in die Navigationsleiste und öffnen Sie dann den Attribut-Inspector, in dem Sie drei Formulareingaben finden.) zurück button "ist das, nach dem wir suchen.
Schnelle Version:
In Ihrem Kind ViewController:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.backItem?.title = "TEXT"
}
Hier ist eine andere Möglichkeit, dies zu tun.
Implementieren Sie in Ihrem übergeordneten View-Controller die folgende Methode:
- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
self.navigationItem.backBarButtonItem.title = newTitle;
}
Wenn Sie in Ihrem untergeordneten Ansichts-Controller den Titel ändern möchten, funktioniert dies:
NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];
Ich konnte die parentViewController
-Eigenschaft nie zum Laufen bringen:
[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];
Ich weiß nicht, ob das ein Fehler ist oder ob ich ihn nicht richtig benutze. Wenn ich jedoch den vorletzten View-Controller im viewControllers
-Array greife, zeigt er auf den übergeordneten View-Controller, und ich kann übergeordnete Methoden mit dieser Referenz korrekt aufrufen.
oK. Ich persönlich hasste all diese Optionen. Deshalb habe ich mir meine eigenen ausgedacht.
Basierend auf den Informationen, die ich gesehen habe. Es hat den Anschein, dass der Previous-View-Controller die Steuerung seiner eigenen "Zurück" -Taste übernimmt, die auf dem Push-View-Controller angezeigt wird.
Ich habe eine Lazy-Load-Methode für das navigationItem auf dem Controller erstellt, der den geänderten Zurück-Button haben möchte.
Meins ist ein Invite Buyer Controller
Käufer einladen ist der standardmäßig eingestellte Text.
aber der Zurück-Button musste einladen sein
Hier ist der Code, mit dem ich den Zurück-Button erstellt habe.
Ich habe diesen Code oben in der Implementatio-Datei (.m) des Controllers platziert und die Methode des Supers automatisch überschrieben.
- (UINavigationItem *)navigationItem{
UINavigationItem *item = [super navigationItem];
if (item != nil && item.backBarButtonItem == nil)
{
item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
item.backBarButtonItem.title = @"Invite";
}
return item;
}
Ich finde, das ist ein viel eleganterer Weg, dies zu erreichen.
Ich platziere diesen Code an einer Stelle und er wird bei Bedarf automatisch aufgefüllt.
Sie müssen den Code nicht vor jeder Push-Anforderung aufrufen.
Hoffe das hilft
Keine der hier erläuterten Lösungen funktionierte für mich. Also habe ich den Titel aus der Szene, aus der ich gekommen bin, auf folgende Weise entfernt:
self.title = @"";
Wenn also eine neue Szene präsentiert wird, erscheint der hintere Text nicht.
Ich stimme absolut zu, dass dies keine klare Lösung ist, aber es hat funktioniert und keiner der Erklärungen hat für mich funktioniert.
Hier ist die Antwort:
Führen Sie in viewDidAppear:animated
(NICHT in viewDidLoad
) Folgendes aus
- (void)viewDidAppear:(BOOL)animated
{
[self.navigationController.navigationBar.backItem setTitle:@"anything"];
// then call the super
[super viewDidAppear:animated];
}
Das heißt, wenn Sie die Form der Zurück-Taste beibehalten möchten.
Für Swift:
// Rename back button
let backButton = UIBarButtonItem(
title: "Back",
style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
target: nil,
action: nil
)
self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(OnClick_btnBack:)];
self.navigationItem.leftBarButtonItem = btnBack;
[btnBack release];
Ich habe festgestellt, dass der einfachste Weg, den Namen der Zurück-Schaltfläche zu ändern, darin besteht, den Titel des View-Controllers auf den Titel der Zurück-Schaltfläche zu setzen und dann die titleView im Navigationselement der View-Controller durch ein reales Label zu ersetzen Name.
So was:
CustomViewController.m
@implementation CustomViewController
- (NSString*)title {
return @"Back Button Title";
}
- (void)viewDidLoad {
[super viewDidLoad];
UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
customTitleView.text = @"Navigation Bar Title";
customTitleView.font = [UIFont boldSystemFontOfSize:20];
customTitleView.backgroundColor = [UIColor clearColor];
customTitleView.textColor = [UIColor whiteColor];
customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
customTitleView.shadowOffset = CGSizeMake(0, -1);
[customTitleView sizeToFit];
self.navigationItem.titleView = [customTitleView autorelease];
}
@end
Dadurch wird Ihr Titel in UINavigationBar so aussehen, als wäre er nativ. Dem Ansichts-Controller die Möglichkeit geben, den Titel und den Zurück-Button-Titel getrennt zu haben.
Im Falle der View-Controller A und B ist A dafür verantwortlich, zu sagen, wie der Zurück-Button aussehen soll, während B angezeigt wird.
BEARBEITEN: Dies behält auch das native Aussehen der hinteren Schaltfläche bei (das Element mit der linken Pfeiltaste).
Dieser Code funktioniert auch. Setzen Sie dies in den Root-Controller des Navigationscontrollers:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
Ich bin neu in iOS, aber ich werde meine einfache Antwort darauf geben, die Navigationssteuerungsklasse außer Kraft zu setzen. Ich habe einfach die Push- und Pop-Methoden überschrieben und den Titel der vorherigen Ansichtssteuerung gespeichert. Sorry für das Einfügen in js block. War wenig verwirrt, wie man es im normalen Codeblock hinterlässt.
#import "MyCustomNavController.h"
@implementation MyCustomNavController {
NSString *_savedTitle;
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
_savedTitle = self.topViewController.title;
self.topViewController.title = title;
[super pushViewController:viewController animated:animated];
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
[self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
return [super popViewControllerAnimated:animated];
}
@end
Ich habe festgestellt, dass es am besten ist, den Titel des aktuellen View-Controllers im Navigationsstapel in den gewünschten Text der Zurück-Schaltfläche zu ändern, bevor Sie zum nächsten View-Controller wechseln.
Zum Beispiel
self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];
Setzen Sie dann in viewDidAppear den Titel auf den gewünschten Titel für den ursprünglichen VC zurück. Voila!
self.navigationController.navigationBar.backItem.title = @"TEXT";
Und in Swift:
self.navigationController?.navigationBar.backItem?.title = "TEXT"
Die meisten Lösungen beenden den ursprünglichen Stil von BackButton (die Schaltfläche mit dem linken Pfeil) und fügen eine gewöhnliche Schaltfläche mit dem gewünschten Titel hinzu.
Um den ursprünglichen Stil beizubehalten, gibt es zwei Möglichkeiten:
1st: Verwenden eines undokumentierten Schaltflächenstils (110 oder ähnliches), den ich lieber nicht verwenden möchte. Wenn Sie möchten, finden Sie hier, auf stackoverflow, wie es geht.
2nd: Um die Idee von Trenskow zu gebrauchen. Es hat mir gefallen und ich benutze es ein bisschen verändert.
Anstatt den Titel (NSString *) zu überschreiben, habe ich mich dazu entschlossen, den Originaltitel auf die folgende Weise beizubehalten (was mir erlaubt, die Titel der Spitze sowie den angegebenen Titel im Push-Status btw zu verwenden).
- (void)viewDidLoad {
[super viewDidLoad];
static NSString * [email protected]"Back"; //or whatever u want
if (![self.title isEqualToString:backButtonTitle]){
UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
customTitleView.text = self.title; // original title
customTitleView.font = [UIFont boldSystemFontOfSize:20];
customTitleView.backgroundColor = [UIColor clearColor];
customTitleView.textColor = [UIColor whiteColor];
customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
customTitleView.shadowOffset = CGSizeMake(0, -1);
[customTitleView sizeToFit];
self.navigationItem.titleView = [customTitleView autorelease];
self.title = backButtonTitle;
}
}
Diese Lösung funktioniert gut und sieht nativ aus. Wenn es in der viewDidLoad-Methode verwendet wird, wird die Ausführung mehr als einmal verhindert.
Ich habe auch eine Lösung von Jessedc ausprobiert, aber sie sieht schlecht aus. Dadurch wird sichtbar, dass die Titelleiste des Benutzers im laufenden Betrieb vom Original auf das gewünschte BackButton und zurück geändert wird.
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"Log out"
style:UIBarButtonItemStyleDone
target:nil
action:nil] autorelease];
sie können es an beliebiger Stelle in den Code des Parrent-Controllers einfügen, wodurch Sie unterschiedliche Rücktasten für verschiedene untergeordnete Ansichten verwenden können.
Dies funktioniert für mich als "vereinfachte" Version der zuvor veröffentlichten Antworten.
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];
backButton.title = @"Go Back";
self.navigationItem.backBarButtonItem = backButton;
Denken Sie daran, den Code in den übergeordneten View-Controller (z. B. die Ansicht, die Ihre Tabellenansicht oder Ihren UITableViewController enthält) und nicht die untergeordnete oder Detailansicht (z. B. UIViewController) einzufügen.
Sie können die hintere Schaltflächenzeichenfolge einfach wie folgt lokalisieren:
backButton.title = NSLocalizedString(@"Back Title", nil);
Stans Antwort war die beste. Es gibt jedoch auch ein Problem: Wenn Sie den Controller mit einer Tab-Leiste verwenden und den Titel des Controllers ändern, können Sie auch den Titel der Tab-Leiste ändern. Die beste Antwort ist, nur view_controller.navigationItem.title zu ändern und view_controller.navigationItem zu verwenden .title in der Funktion . Antwort ist hier: (Mit ARC und fügen Sie sie in viewDidLoad der Ansicht hinzu)
static NSString * [email protected]"Back"; //or whatever u want
if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
custom_title_view.text = view_controller.navigationItem.title; // original title
custom_title_view.font = [UIFont boldSystemFontOfSize:20];
custom_title_view.backgroundColor = [UIColor clearColor];
custom_title_view.textColor = [UIColor whiteColor];
custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
custom_title_view.shadowOffset = CGSizeMake(0, -1);
[custom_title_view sizeToFit];
view_controller.navigationItem.titleView = custom_title_view;
view_controller.navigationItem.title = back_button_title;
}
Bei meiner Verwendung mache ich es zu einer Funktion wie dieser, ich habe nur die Funktion mit einem Zeilencode in viewDidLoad.
+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
static NSString * [email protected]"Back"; //or whatever u want
if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
custom_title_view.text = view_controller.navigationItem.title; // original title
custom_title_view.font = [UIFont boldSystemFontOfSize:20];
custom_title_view.backgroundColor = [UIColor clearColor];
custom_title_view.textColor = [UIColor whiteColor];
custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
custom_title_view.shadowOffset = CGSizeMake(0, -1);
[custom_title_view sizeToFit];
view_controller.navigationItem.titleView = custom_title_view;
view_controller.navigationItem.title = back_button_title;
}
}
Wenn Sie nicht nur den Text der Schaltfläche "Zurück" in denselben Text ändern und die ursprüngliche Pfeilform beibehalten möchten, sondern auch etwas tun, wenn der Benutzer auf die Schaltfläche "Zurück" klickt, empfehle ich Ihnen, sich in " CustomNavigationController ".
PROBLEM: "Zurück" -Text in der Navigationsleiste kann nicht ersetzt werden.
GRUND: Die Beschriftung "Zurück" wird nach dem Drücken einer Ansicht in der Navigationsleiste festgelegt, da das .title-Attribut im übergeordneten View-Controller auf null gesetzt wurde (oder nicht initialisiert wurde).
EINE LÖSUNG: Wenn Sie self.title = "Whatever ..." einstellen, sehen Sie, dass anstelle von "Back" nach dem Drücken des neuen View-Controllers "Whatever ..." angezeigt wird.
Swift 4
iOS 11.2
Xcode 9.2
TableViewController1 ---segue---> TableViewController2
Sie können den Text der Zurück-Schaltfläche in TableViewController1 oder TableViewController2 ändern.
Ändern Sie den hinteren Schaltflächentext in TableViewController1 :
1) In viewWillAppear()
:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let myBackButton = UIBarButtonItem()
myBackButton.title = "Custom text"
navigationItem.backBarButtonItem = myBackButton
}
Aus irgendeinem Grund ist viewDidLoad () zu früh, um die Schaltfläche "Zurück" zum Navigationselement hinzuzufügen. Um die beiden TableViewControllers zu verbinden, ziehen Sie im Storyboard-Steuerelement von TableViewCell in TableViewController1 in die Mitte von TableViewController2 und wählen Sie im Popup-Menü Selection Segue > Show
aus.
2) In tableView(_:didSelectRowAt:)
:
override func tableView(_ tableView: UITableView, didSelectRowAt: IndexPath) {
let myButton = UIBarButtonItem()
myButton.title = "Custom text"
navigationItem.backBarButtonItem = myButton
performSegue(withIdentifier: "ShowMyCustomBackButton", sender: nil)
}
Um die beiden TableViewControllers zu verbinden, ziehen Sie im Storyboard-Steuerelement aus dem kleinen gelben Kreis über TableViewController1 in die Mitte von TableViewController2 und wählen Sie im Popup-Menü Manual Segue > Show
aus. Wählen Sie dann das Segment aus, das die beiden TableViewControllers verbindet, und geben Sie im Attribut-Inspektor neben "Bezeichner" "ShowMyCustomBackButton" ein.
3) In storyboard
:
Wenn Sie nur statischen benutzerdefinierten Text für die Zurück-Schaltfläche benötigen, wählen Sie das NavigationItem für TableViewController1 aus (es hat einen <
für ein Symbol im Inhaltsverzeichnis des Storyboards), öffnen Sie den Inspektor Attribute und geben Sie in das Feld "Zurück-Schaltfläche" Ihren benutzerdefinierten Text ein (Stellen Sie sicher, dass Sie dieses Feld verlassen, damit die Änderung wirksam wird.).
Ändern Sie den hinteren Schaltflächentext in TableViewController2 :
1) In viewWillAppear()
:
class MySecondTableViewController: UITableViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let myBackButton = UIBarButtonItem(
title: "<Custom text",
style: .plain,
target: self,
action: #selector(goBack) //selector() needs to be paired with an @objc label on the method
)
navigationItem.leftBarButtonItem = myBackButton
}
@objc func goBack() {
navigationController?.popViewController(animated: true)
}
Um die beiden TableViewControllers zu verbinden, ziehen Sie im Storyboard-Steuerelement von TableViewCell in TableViewController1 in die Mitte von TableViewController2 und wählen Sie im Popup-Menü Selection Segue > Show
aus.
Wir haben zwei VCs A und B.
Wenn Sie den Titel in B ändern möchten, schreiben Sie diesen Code in A
- (IBAction)goToBViewController:(UIButton *)sender {
BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[self.navigationController pushViewController:vc animated:NO];
}
Swift 4.1 Xcode 9.4
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)
Verwenden Sie die folgende Codezeile:
UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@"hello"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
self.navigationItem.leftBarButtonItems =[[NSArray alloc] initWithObjects:newBackButton, nil];
self.navigationItem.leftItemsSupplementBackButton = YES;
Gemäß document of UINavigationBar
> backItem
Wenn die leftBarButtonItem-Eigenschaft des obersten Navigationselements .__ ist. Null zeigt die Navigationsleiste eine Zurück-Schaltfläche, deren Titel abgeleitet ist von dem Artikel in dieser Eigenschaft.
Die Einstellung backItem.backBarButtonItem
funktioniert jedoch nicht beim ersten Mal viewWillAppear. Das Festlegen von topItem.backBarButtonItem
funktioniert nur beim ersten Aufruf von viewWillAppear. Weil navigationBar.topItem
noch auf previousViewController.navigationItem
zeigt. In viewWillLayoutSubviews
werden topItem
und backItem
aktualisiert. Nach dem ersten Mal viewWillAppear
sollten wir den backItem.backBarButtonItem
setzen.
ANSWER: Setzen Sie eine backBarButtonItem
auf die navigationItem
des vorherigen viewControllers, egal wann und wo in Ihrem aktuellen viewController (der top viewController). Sie können diesen Code in viewWillAppear
oder viewDidLoad
verwenden. Überprüfen Sie meinen Blogbeitrag iOS Set Navigation Bar Back Button Title für Detailanalyse.
NSArray *viewControllerArray = [self.navigationController viewControllers];
// get index of the previous ViewContoller
long previousIndex = [viewControllerArray indexOfObject:self] - 1;
if (previousIndex >= 0) {
UIViewController *previous = [viewControllerArray objectAtIndex:previousIndex];
previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:backButtonTitle
style:UIBarButtonItemStylePlain
target:self
action:nil];
}
Wenn Sie mehr als eine Navigation haben, ist das
ParentViewController -> ChildViewController1 -> ChildViewController2
sie können den folgenden Code verwenden, um den Titel der Zurück-Schaltfläche in der Navigationsleiste zu ändern.
self.navigationController? .navigationBar.topItem? .backBarButtonItem = UIBarButtonItem.init (Titel: "Zurück", Stil: .plain, Ziel: null, Aktion: null)
Dies funktioniert für mich in Swift 4 und iOS 11. Am häufigsten muss ich dies tun, wenn der Benutzer in einer Tabellenansicht auf eine Zeile tippt und ein neuer View-Controller auf den Navigationsstapel verschoben wird. Normalerweise möchte ich, dass die Zurück-Schaltfläche der Name oder ein Attribut des Objekts ist, das durch die angezeigte Zeile dargestellt wird. Also mache ich das normalerweise in didSelectRowAt...
so:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let object = // get the object this row represents
let backButton = UIBarButtonItem()
backButton.title = object.name // or whatever
self.navigationItem.backBarButtonItem = backButton
// now show or segue to the next view controller
}
Es scheint, dass der Navigationscontroller sucht
previousViewController.navigationItem.title
Wenn nichts dort aussieht
previousViewController.title