Frage

Die „Zurück-Button“ ein UINavigationController standardmäßig zeigt den Titel des letzten Blicks in dem Stapel. Gibt es eine Möglichkeit benutzerdefinierten Text in der Zurück-Taste haben statt?

War es hilfreich?

Lösung

Von Link :

self.navigationItem.backBarButtonItem =
   [[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
            style:UIBarButtonItemStylePlain
           target:nil
           action:nil];

Wie Tyler sagte in den Kommentaren:

  

tut dies nicht im sichtbaren View-Controller, aber in der Ansicht   Controller, die Sie sehen würden, wenn Sie die Zurück-Taste

Hit

Andere Tipps

Sie können den Text in der Interface Builder gesetzt:

Wählen Sie den Navigationspunkt des Viewcontroller, dass die zurück-Taste zurückkehren würde:

eingeben Bild Beschreibung hier

In der Versorgungs Panel Attribut Inspektoren, geben Sie Ihr Label für die Zurück-Taste:

eingeben Bild Beschreibung hier

Ich würde diesen Ansatz vorziehen, über den Titel im Code wie in der akzeptierten Antwort zu setzen.

  

Beachten Sie auch, was Sie brauchen diese eine Ebene im View-Controller zu tun bis die   Stapel. Mit anderen Worten, tut dies nicht im sichtbaren View-Controller,   aber im View-Controller, die Sie sehen würden, wenn Sie die Zurück-Taste getroffen.
   - Tyler

Ich benutze diese:

// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.backItem.title = @"Custom text";
}

Ich fand eine praktische Lösung für dieses Problem, indem Sie einfach den Titel des Reglereinstellung bevor Sie einen anderen Controller auf den Stapel, wie diese drängen:

self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];

Dann stellen Sie sicher, den Originaltitel in viewWillAppear zu setzen, wie folgt aus:

-(void)viewWillAppear:(BOOL)animated
{
  ...
  self.navigationItem.title = @"Original Title";
  ...
}

Das funktioniert, weil das Standardverhalten von UINavigationController wenn die Zurück-Taste während eines Push-Vorgangs der Konstruktion ist es, den Titel aus dem vorherigen Controller zu verwenden.

Der Titel der Zurück-Taste standardmäßig auf die Titel der vorherigen Ansicht so ein schneller Trick, den ich verwenden ist, den folgenden Code auf der vorherige Ansicht der .m-Datei zu platzieren.

-(void)viewWillAppear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Original Title";
}

-(void)viewWillDisappear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Back";
}

in Ihrer init-Methode, fügen Sie den folgenden Code ein:

- (id)initWithStyle:(UITableViewStyle)style {
    if(self = [super init]) {

        //...

        UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                             style:UIBarButtonItemStylePlain 
                                            target:self 
                                            action:@selector(goBack)];
        self.navigationItem.leftBarButtonItem = customBackButton;
        [customBackButton release];

        //...
    }
    return self;
}

dann eine einfache Methode hinzufügen, Viewcontroller entlasse ermöglichen:

-(void)goBack {
    [self.navigationController popViewControllerAnimated:YES];  
}

Fügen Sie den folgenden Code in viewDidLoad oder Loadview

self.navigationController.navigationBar.topItem.title = @"Custom text";

Ich habe es getestet in iPhone und iPad mit iOS 9

zu zügeln Antwort Hinzufügen. Beachten Sie von der Apple-docs, dass die Erklärung von backBarButtonItem ist dies:

@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem

Daher Antwort der Lauf wird ein Speicherleck auf, weil die synthetisierte Setter wird die Instanz, die Sie es passieren retain, die nie explizit freigegeben wird. Sie können dies beheben, indem autorelease mit

 self.navigationItem.backBarButtonItem = 
      [[[UIBarButtonItem alloc] initWithTitle:@"Custom Title" 
         style:UIBarButtonItemStyleBordered
         target:nil
         action:nil] autorelease];  //<-- autoreleased

Sie können auch eine Variable am Beispiel zeigen, so dass Sie es explizit später freisetzen können:

UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];

Hope, das hilft!

- (void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
  self.navigationItem.backBarButtonItem = backButton;
  [backButton release];
}

Ich habe etwas Interessantes entdeckt. Wenn Sie die UINavigationController Unterklasse und die pushViewController:animated: Methode außer Kraft setzen und etwas tun, wie folgt aus: (beachten Sie, dass ich verwende ARC)

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
 initWithTitle: @"Back" 
 style: UIBarButtonItemStyleBordered
 target: nil action: nil];

viewController.navigationItem.backBarButtonItem = backButton;

[super pushViewController:viewController animated:animated];

Dann gilt für all ViewControllers, die mit Ihrer Navigationssteuerung gedrückt werden, um die Schaltfläche „Zurück“ in ihnen automatisch wird. Wenn Sie den Text für bestimmte View-Controller ändern möchten, können Sie versuchen, und vielleicht die Viewcontroller auf eine bestimmte Klasse oder eigene Protokoll werfen (die Ihre Viewcontroller, von dem erbt eine Methode, wie backButtonText oder etwas albern wie das haben könnte), die geben kann Sie bestimmte Informationen über die Viewcontroller, die in sothat Kommens können Sie die zurück-Taste Text für sie anpassen. Nun ist der Zurück-Taste Text wird an einem Ort betreut, die die Verantwortung allein halten soll. Ich muss zugeben, dass eine neue Schaltfläche Erstellen der Text zu ändern saugt, aber na ja.

Kann jemand denken Sie an einen Grund, warum es so nicht zu tun? Zumindest haben Sie nicht mit Viewcontroller Titel Geige oder erinnern müssen, um eine neue Back-Button zu erstellen, bevor die Viewcontroller auf der Navigationssteuerung drücken.

rein Antwort funktioniert gut.

Beachten Sie, wenn Sie mehr als einen View-Controller drücken, für jeden von ihnen die geänderte Zurück-Button Titel erscheint, was nicht sein kann, was Sie wollen.

In diesem Fall werden Sie die benutzerdefinierte erstellen müssen UIBarButtonItem jedes Mal, wenn Sie einen View-Controller drücken.

Also, stellen Sie sicher, dass Sie tun es vor die View-Controller drücken, sonst wird ein Bildschirm Schluckauf wie der Titel Änderungen erhalten.

Die Erweiterung auf Aubrey Vorschlag, Sie können dies tun, in den Kind-View-Controller:

erstellen zwei Variablen für die alten Werte des übergeordneten navigationItem.title Speicherung und die Eltern navigationItem

UINavigationItem* oldItem;
NSString* oldTitle;

in viewDidLoad, fügen Sie den folgenden:

oldItem = self.navigationController.navigationBar.topItem;  
oldTitle = oldItem.title;  
[oldItem setTitle: @"Back"];  

in viewWillDisappear, fügen Sie den folgenden:

[oldItem setTitle: oldTitle];  
oldTitle = nil;  // do this if you have retained oldTitle
oldItem = nil;   // do this if you have retained oldItem

Es ist nicht perfekt. Sie werden sehen, die den Titel der übergeordneten Ansicht ändern als den neuen Controller in animiert wird. Aber dies das Ziel, individuelle tut erreichen die Beschriftung der Zurück-Taste und halten es wie ein Standard-Zurück-Taste geformt.

Setzen Sie dieses in Sie viewDidLoad, hoffen, dass es führen in das, was Sie suchen

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];

Wenn Sie wollen Titel einzustellen, in Controller ANKOMMEN (manchmal mehr Logik ..) in swift 3 do:

func setBackButtonNavBar(title: String, delay: Double){

    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in

        if let navBar = self.navigationController?.navigationBar{
            navBar.backItem?.title = title
        }
    })

}

in der kommenden Controller:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setBackButtonNavBar(title: "back", delay: 0.3)
}

in der Regel habe ich self.setBackButtonNavBar in einem Controller-Erweiterung.

Ich weiß, das ist eine alte Frage und die Art Antworten aus aktualisiert!

Der einfache Weg ist dies in Mutterviewcontroller zu tun:

das heißt derjenige, der Sie zum nächsten View-Controller nimmt.

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

Auf diese in Code entfernen Sie die Zurück-Taste Stil des UINavigationConroller. Wenn Sie ein Navigationselement in jeder von Ihnen Ansichten hinzufügen, können Sie den Titel der Rückseite in der StoryBoard botton einstellen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top