wake-up-neo.net

Wie ändere ich den Titel der Schaltfläche "Zurück" in einer Navigationsleiste?

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.

218
Dale

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];
338
Jordan

In ChildVC hat das für mich funktioniert ...

self.navigationController.navigationBar.topItem.title = @"Back";

Funktioniert auch in Swift!

self.navigationController!.navigationBar.topItem!.title = "Back"
92
Peter Pan

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".

80
Victor Bogdan

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.

enter image description here

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.

56
john.k.doe

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.

41
seniorbenelli

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.

25
Jessedc

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.

18
Duncan Smith

Das funktioniert besser für mich. Versuchen : 

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
18
Felipe FMMobile

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.

17
EEE

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

  1. Fügen Sie im Storyboard der Parent View Controller-Szene einen Navigation Item hinzu (nicht den untergeordneten VC).

 navigation item

  1. Geben Sie im Attributes Inspector Ihres neuen Navigation Item ein space-Zeichen in das Feld Back Button ein. Mehr dazu später.

 navigation item in View Hierarchy

 add a space character to the Back Button field

  1. Fügen Sie im View-Controller Parent den folgenden Code hinzu:

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 ItemBack 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.

15
Robert Chen

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.

9
pedrouan

Schnelle Version:

In Ihrem Kind ViewController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}
7
buxik

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.

6
Alex Reynolds

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

5
The Lazy Coder

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.

5
Basheer_CAD

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
5
Ryan R
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];
5
Gopikrishna

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).

4
Trenskow

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];
4
user2666203

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

4
Sergey Brazhnik

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!

4
OneInABajilian

self.navigationController.navigationBar.backItem.title = @"TEXT";

Und in Swift:

self.navigationController?.navigationBar.backItem?.title = "TEXT"
4
onmir

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.

3
Stan
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. 

3
chikuba

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);
2
Lex L.

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;
  }
}
1
jtianling

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 ".

1
jianpx

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. 

1
7stud

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)
1
iOS

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;
1
Payal Maniyar

Gemäß document of UINavigationBar> backItem

 enter image description here

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];
    }
1
situee

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)

0
Rizwan Shaikh

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
}
0
Murray Sagal

Es scheint, dass der Navigationscontroller sucht

previousViewController.navigationItem.title

Wenn nichts dort aussieht

previousViewController.title
0
Basem Saadawy