So ändern Sie Text auf einer Zurück-Schaltfläche

90

Standardmäßig verwendet die Zurück-Schaltfläche als Text einen Titel eines Viewcontrollers. Kann ich Text auf der Zurück-Schaltfläche ändern, ohne den Titel eines Ansichts-Controllers zu ändern? Ich brauche dies, weil ich einen Ansichts-Controller habe, dessen Titel zu lang ist, um angezeigt zu werden, und in diesem Fall möchte ich nur "Zurück" als Beschriftung für die Schaltfläche "Zurück" anzeigen.

Ich habe Folgendes versucht, was nicht funktioniert hat:

self.navigationItem.leftBarButtonItem.title = @"Back";

Vielen Dank.

Ilya Suzdalnitski
quelle
3
Beachten Sie, dass die Zurück-Schaltflächen aus einem bestimmten Grund Titel haben. Wenn Sie den Titel in "Zurück" ändern, entziehen Sie dem Benutzer Informationen darüber, wohin die Schaltfläche zurückkehrt.
Simon

Antworten:

167

Versuchen

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

Ich fand das, indem ich mir die backBarButtonItem- Dokumente in Apples Dokumenten für UINavigationItem ansah .

Marc W.
quelle
1
Entschuldigung, ich habe derzeit keine Möglichkeit, dies zu testen. Wendet dies jedoch die nach links gerichtete Form der integrierten Zurück-Schaltflächen an oder behält es die rechteckige Standardform des UIBarButtonItem bei?
Marco
Ich bin mir eigentlich nicht sicher. Ich gehe davon aus, dass die Form der Zurück-Schaltfläche automatisch beibehalten wird, da Sie die Eigenschaft backButton festlegen, aber Sie müssten sie testen, um dies herauszufinden. Ich bin auch neugierig.
Marc W
2
Ja, es hat funktioniert! Es ändert ja den Titel und ja, speichert die Form. Danke fürs Helfen.
Ilya Suzdalnitski
1
Hinweis: Die Schaltfläche "Zurück" wird zweimal beibehalten [1x von der Zuweisung, 1x von der Beibehaltung der Eigenschaft]. Wenn Sie jedoch die Zurück-Taste nicht ändern, ist sie praktisch harmlos.
Kelvin
29
Siehe Marcos Kommentar unten - Sie sollten dies auf dem Controller aufrufen, der etwas Neues pushen soll, nicht auf dem Controller, der gepusht wird.
Bill
97

Der Ansatz von Marc W hat großartig funktioniert, als ich herausgefunden habe, auf welchen Controller ich ihn anwenden soll: den, der umbenannt wird, nicht den oben genannten. Wenn dies also der Navigationsstapel ist:

(bottom)  ControllerA -> ControllerB  (top)

... und Sie möchten einen kürzeren Titel für ControllerA in der Zurück-Schaltfläche angeben, die angezeigt wird, wenn ControllerB oben ist. Sie wenden die Eigenschaftsänderung auf ControllerA an .

Es ist also eher im Kontext von self.title, nicht wie bei den anderen Setzern für Links- / Rechts-Balkentasten.

Marco
quelle
13
Dies ist ein sehr wichtiges Detail.
Bill
4
wcochran, es funktioniert mit Storyboard, stellen Sie einfach sicher, dass Sie die Zurück-Schaltfläche des übergeordneten Controllers setzen. Wenn Sie also Controller A haben, der auf Controller B zeigt (über das Storyboard-Segment), müssen Sie im Storyboard-Editor die Eigenschaft "Back Button" für Controller A festlegen, um den Text für die Schaltfläche "Zurück" in Controller B anzupassen.
Unterbrechen Sie den
Danke Marco. Was ich über diese Frage empfand, war, dass jeder versucht zu antworten (und richtig zu antworten), aber nicht für die Frage, die gestellt wird. Sie treffen im Grunde den Nagel in den Kopf und richtig. Dank dafür!
TheiOSguy
+1 für wichtige Details. Die obige Antwort funktioniert nur, wenn Sie DIESE Antwort verstehen.
Taufe
Sie haben Recht, die Tastatur des neuen MacBook One ist etwas gewöhnungsbedürftig.
Mason G. Zhwiti
48

Sie können dies im Storyboard tun. Suchen Sie den Ansichts-Controller, zu dem Sie zurückkehren möchten (den mit dem langen Titel), wählen Sie das Navigationselement aus, öffnen Sie den Attributinspektor (Alt + Befehlstaste + 4) und fügen Sie den benutzerdefinierten Titel der Zurück-Schaltfläche ein.

Geben Sie hier die Bildbeschreibung ein

alyoka
quelle
Dies war genau das, was ich brauchte, da ich wollte, dass alle Zurück-Schaltflächen den Text "Zurück" anstelle der Navi-Titel des vorherigen Controllers haben.
Dave
8
Zu beachten ist, dass der Text der Zurück-Schaltfläche in der Ansicht festgelegt wird, aus der der nächste Controller verschoben wurde, und nicht in dem Ansichts-Controller, den Sie derzeit angezeigt haben.
Darbio
Dies ist eine gute, einfache Lösung, aber bitte benennen Sie nicht alle Ihre Zurück-Tasten in "Zurück" um, da dies gegen Apples HIG verstößt und einen Teil des Zwecks einer Zurück-Taste zunichte macht. :(
Samuel Goodwin
Hat super funktioniert. Stellen Sie einfach sicher, dass Sie die Storyboard-Datei SPEICHERN. Mein erster Versuch hat nicht funktioniert, weil ich nicht bemerkt habe, dass das Storyboard nicht gespeichert wurde! Und ja, Sie ändern die BACK-Taste auf dem View Controller, von dem Sie kommen!
EricWasTaken
Sehr gut, aber was ist, wenn ich nur einen Pfeil ohne Text lassen möchte? :)
Iurii Vasylenko
40

Danke Marco ... das hat mir geholfen ...

Hier ist was ich getan habe.

Wenn Sie eine tableView verwenden, um zu verschiedenen Ansichten zu navigieren, geben Sie den folgenden Code ein:

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

In Ihrer didSelectRowAtIndexPathMethode ... des ersten Controllers ... Controller A.

Wenn Sie zu Controller B navigieren, hat die Schaltfläche den Titel "Zurück".

Ben Call
quelle
1
Vielen Dank, lieber @Ben. Genau das habe ich gesucht :).
Arslan
12

Die Zurück-Schaltfläche zieht ihren Text aus dem Titel des übergeordneten Ansichts-Controllers.

Legen Sie im übergeordneten Ansichts-Controller (dem Ansichts-Controller, der angezeigt wird, wenn Sie auf die Schaltfläche Zurück tippen) einen eigenen Titel als gewünschten Text auf der Schaltfläche Zurück fest.

Nehmen wir zum Beispiel an, wir haben eine RootViewControllerKlasse. Wenn wir in der Tabellenansicht auf eine Zelle klicken, wird eine Instanz von gepusht SecondViewController. Wir möchten, dass der Zurück-Button der SecondViewControllerInstanz "Home" lautet.

in der viewDidLoadMethode von RootViewController.m :

self.title = @"Home";

in der viewDidLoadMethode von SecondViewController.m :

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

Wenn Sie möchten, dass Ihre Zurück-Schaltfläche "Zurück" lautet, setzen Sie den Titel des übergeordneten Ansichts-Controllers auf @"Back";

Rose Perrone
quelle
10

Das funktioniert besser für mich. Versuchen :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Felipe FMMobile
quelle
1
Tolle Antwort hat perfekt funktioniert. es sollte als ausgenommen markiert werden.
Muhammad Rizwan
9

Wenn Sie ein Storyboard verwenden:

  1. Öffnen Sie das StoryBoard
  2. Suchen Sie im Fenster "Dokumentübersicht" nach ViewController, zu dem Sie zurückkehren möchten
  3. Klicken Sie auf das Navigationselement dieses ViewControllers
  4. Ändern Sie im Attribut-Explorer den Wert der Schaltfläche "Zurück" in Ihre benutzerdefinierte Kachel

Das ist es, viel Spaß ...

AntonijoDev
quelle
5

In MonoTouch funktioniert Folgendes (in ViewDidLoad des übergeordneten Controllers):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);
BillF
quelle
3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

Das hat bei mir funktioniert.

user1004911
quelle
3

Legen Sie in Ihrem übergeordneten Ansichts-Controller die Schaltfläche Zurück fest, wenn die Ansicht geladen wird:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Beachten Sie, dass wir nicht einbeziehen müssen autorelease am Ende nicht die neueste iOS-Version einbinden müssen.

Hoffe das hilft!

Zorayr
quelle
1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

Für mich geht das. Sie können "zurück" durch etwas anderes ersetzen.

ohmer
quelle
Erklären Sie bei der Beantwortung mit Code immer, was das Problem mit dem bereitgestellten Code war und wie Ihr Code das Problem behebt.
Lukas Knuth
1

Dieser hat für mich funktioniert, wenn Sie keinen Titel haben wollen!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
gpichler
quelle
1
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
user2783798
quelle
0

Endlich wusste ich, warum diese Antworten bei mir zunächst nicht funktionierten. Ich habe den Titel im Storyboard festgelegt. Wenn ich den Titel auf Code setze. Es klappt!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
user2547667
quelle
In Zukunft möchten Sie möglicherweise solche Beiträge als Kommentare zu der Antwort verfassen, die für Sie nicht funktioniert hat.
Keith Smiley
0

Meine Lösung bestand darin, den Titel festzulegen, wenn der Ansichts-Controller auf den Navigationsstapel verschoben wird, und ihn mithilfe der Delegate-Methode zurückzusetzen, bevor Push-VC geschlossen wird:

Also habe ich die Titeländerung in den aufrufenden View Controller eingefügt, wenn ich den anderen View Controller wie folgt drücke:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

und in der Delegate-Rückruffunktion (die ich in viewWillDissapear aufrufe):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}
Despotovic
quelle
0

Wenn Sie nicht nur den Text der Schaltfläche "Zurück" ändern und die ursprüngliche Form des linken Pfeils beibehalten möchten , sondern auch etwas tun möchten, wenn der Benutzer auf die Schaltfläche " Zurück " klickt, empfehlen wir Ihnen, sich in meinem " CustomNavigationController " umzuschauen .

jianpx
quelle
0

// Sie können dies erreichen, indem Sie den Titel im vorherigen Ansichts-Controller wie unten gezeigt festlegen

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}
John Carto
quelle
0

Informationen zum Ändern des Titels der Zurück-Schaltfläche finden Sie im folgenden Code

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`
Kiran K.
quelle
-1

Das hat bei mir funktioniert:

self.navigationController.navigationBar.topItem.title = "Back"
Felsig
quelle