Come posso cambiare il titolo del pulsante "indietro" su una barra di navigazione


224

Attualmente il valore predefinito del pulsante della barra di sinistra è il titolo della vista che ha caricato quello corrente, in altre parole la vista da mostrare quando si preme il pulsante (pulsante indietro).

Voglio cambiare il testo mostrato sul pulsante in qualcos'altro.

Ho provato a inserire la seguente riga di codice nel metodo viewDidLoad del controller di visualizzazione, ma non sembra funzionare.

self.navigationItem.leftBarButtonItem.title = @"Log Out";

Cosa dovrei fare?

Grazie.

Risposte:


345

Questo dovrebbe essere inserito nel metodo che chiama ViewController intitolato "NewTitle". Subito prima dell'istruzione push o popViewController.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];

47
Quando si è nel controller vista figlio, la chiamata dal controller vista figlio non funzionerà. È necessario chiamare questo dal controller della vista padre, mentre all'interno del controller della vista figlio.
Alex Reynolds,

2
Per cambiare il pulsante Indietro per il mio controller di visualizzazione di terzo livello (seconda pressione) ho dovuto usare la seguente riga invece della risposta sopra: [[self.parentViewController navigationItem] setBackBarButtonItem: newBackButton]; Sto facendo qualcosa di sbagliato?
JonB,

4
Jordan dice che "[ha aggiunto] un po 'più di chiarezza su dove mettere il codice." Qui c'è ancora più chiarezza: inseriscilo nel primo controller (noto come genitore), immediatamente prima della chiamata per spingere il secondo controller (noto anche come figlio).
benvolioT

1
puoi creare un BaseViewController personalizzato e inserirlo in-viewDidLoad:
ArtFeel

2
Non devi farlo subito prima di premere o pop. Puoi farlo in viewDidLoad o loadView o in qualunque altro luogo imposti il ​​titolo e altre proprietà per questa vista. La risposta di Victor Bogdan di seguito è più chiara, IMHO.
Joe Strout,

98

In ChildVC ha funzionato per me ...

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

Funziona anche in Swift!

self.navigationController!.navigationBar.topItem!.title = "Back"

4
Testato e verificato su iOS 7 in Xcode 5.0.2. Questo cambierà il titolo della schermata precedente in Indietro quando ci tornerai.
Alex Zavatone,

Soluzione più semplice. Funziona su iOS 6 e 7. Inserisci UIViewController di base e il gioco è fatto. Molto meglio della soluzione IB o impostazione nel vc di spinta.
Eric Chen,

46
cambia il titolo del controller della vista precedente, questo è il problema in questa soluzione
Nikita

2
@Nikita, puoi ripristinare la tessera in vista. WillDisappear
Dan Beaulieu,

81

Ecco la documentazione per backBarButtonItem :

"Quando questo elemento di navigazione si trova immediatamente sotto l'elemento in cima allo stack, il controller di navigazione ricava il pulsante Indietro per la barra di navigazione da questo elemento di navigazione. [...] Se si desidera specificare un'immagine o un titolo personalizzati per il pulsante Indietro , puoi invece assegnare un elemento del pulsante della barra personalizzata (con il titolo o l'immagine personalizzati) a questa proprietà. "

Visualizza controller A (il controller di visualizzazione "padre" ):

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

Quando qualsiasi altro controller di visualizzazione B è in cima allo stack di navigazione e A è proprio sotto di esso, il pulsante Indietro di B avrà il titolo "Corto" .


4
la parte difficile è che è necessario impostare il pulsante Indietro nel controller della vista PARENT e non nella vista figlio. Ho perso un'ora appena capito.
Merkurial,

56

in Xcode 4.5 usando lo storyboard, la soluzione di gran lunga più semplice che ho trovato quando il valore del pulsante Indietro non deve cambiare in modo dinamico è quella di utilizzare il campo "Pulsante Indietro" associato all'elemento di navigazione del View Controller a cui vuoi che il pulsante "Indietro" dica qualcos'altro.

ad es. nello screenshot qui sotto, voglio il pulsante Indietro per i controller di visualizzazione che premo per avere "Indietro" come titolo del pulsante Indietro.

inserisci qui la descrizione dell'immagine

ovviamente, questo non funzionerà se hai bisogno del pulsante Indietro per dire qualcosa di leggermente diverso ogni volta ... ci sono tutte le altre soluzioni qui per quello.


La domanda originale non diceva nulla sull'uso degli storyboard, quindi è sicuramente positivo che questa non sia la risposta accettata, tuttavia una soluzione corretta è per lo sviluppo basato su storyboard.
villapossu,

42

Lo so, la domanda è molto vecchia, ma ho trovato una bella soluzione.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

Funziona da childView! Testato con iOS 7.


Questo sembra funzionare solo a un livello. Per me non funziona per un figlio di un bambino. iOS 8.
narco,

26

Forse sono troppo semplicistico, ma dalla documentazione di Apple il testo è:

Se un elemento del pulsante della barra personalizzata non è specificato da nessuno dei controller della vista, viene utilizzato un pulsante Indietro predefinito e il suo titolo è impostato sul valore della proprietà title del controller della vista precedente, ovvero il controller della vista di un livello inferiore su la pila.

La soluzione contrassegnata correttamente sopra imposta una voce di pulsante predefinita dal controller principale. È la risposta giusta, ma sto risolvendo il problema cambiando la self.titleproprietà di UIViewController subito prima di spingere il nuovo controller nello stack di NavigationController.

Questo aggiorna automaticamente il titolo del pulsante Indietro sul controller successivo, e finché self.titletorni a quello che dovrebbe essere viewWillAppearnon riesco a vedere questo metodo causando troppi problemi.


19

Questo lavoro funziona meglio per me. Provare :

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

19

In Swift / iOS8, per me ha funzionato:

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

Portato dalla risposta di Felipe.


la sintassi rapida 1.1 èself.navigationController?.navigationBar.topItem?.backBarButtonItem
Warren Burton,

3
Lo stile dovrebbe essere UIBarButtonItemStyle.Plain
Micro

2
Grazie per questo. Che API veramente patetica è questa. E rappresentante di UIKit in generale. Tra le barre di navigazione e le barre di stato in iOS, è una meraviglia che sviluppiamo ancora per questa maledetta piattaforma. Grazie a Gesù bambino per Stack Overflow e i suoi collaboratori!
Womble

@Wobmle: dovresti sviluppare per Android per alcuni mesi;)
fl034

17

Ok, ecco la strada. Se si dispone di un controller di visualizzazione "prima" e si naviga su un altro controller di vista "secondo" premendo un pulsante o ecc., È necessario eseguire alcune operazioni. Per prima cosa devi creare un BarButtonItem nel metodo ViewDidLoad del controller di visualizzazione "second" come questo;

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

Dopo averlo fatto, devi scrivere nel codice per l'azione "btnBack" nello stesso file .m come questo;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

È tutto.


2
A leftBarButtonItemnon ha l'aspetto di a backBarButtonItem, se questo è importante nella progettazione dell'applicazione.
Alex Reynolds,

1
Delle soluzioni pubblicate (grazie mille) questa sembra funzionare, anche se come Alex ha affermato sopra, il pulsante della barra sinistra non sembra un elemento della barra posteriore. Come posso farlo sembrare un elemento della barra posteriore ???
Dale,

17

Avevo un controller di visualizzazione padre con un titolo davvero lungo. Ciò ha comportato il sanguinamento del testo del pulsante Indietro nel titolo del controller della vista figlio.

Dopo aver provato diverse soluzioni, questo è quello che ho finito per fare (espandendo l'approccio @ john.k.doe):

Utilizzando Xcode 7.2, Swift 2

  1. Nello Storyboard, aggiungi Navigation Itema alla scena Controller vista padre (non il VC figlio)

elemento di navigazione

  1. Nel Attributes Inspectornuovo Navigation Item, digita un spacecarattere nel Back Buttoncampo. Più su questo più tardi.

elemento di navigazione in Visualizza gerarchia

aggiungi un carattere spazio al campo Pulsante Indietro

  1. Nel controller della vista padre , aggiungi il seguente codice:

frammento:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

Spiegazione:

Il tipo di pulsante Indietro appartiene al controller della vista padre. Il Navigation Itemti dà una maniglia per il pulsante indietro, in modo da poter impostare il titolo nel codice o nello Storyboard.

Nota:

Se si lascia il Navigation Item Back Buttontesto come stringa vuota predefinita, il titolo del pulsante Indietro diventerà "Indietro".

Altri approcci funzionano, perché usare questo ?:

Sebbene sia possibile sovrascrivere il titolo del pulsante Indietro sul controller di visualizzazione figlio, è stata una sfida ottenerne una maniglia fino a quando non è già lampeggiato brevemente sullo schermo.

Alcuni degli approcci costruiscono un nuovo pulsante Indietro e sovrascrivono quello esistente. Sono sicuro che funziona e probabilmente necessario in alcuni casi d'uso. Ma preferisco sfruttare le API esistenti quando possibile.

La modifica titledel controller della vista padre è la soluzione più rapida per alcune situazioni. Tuttavia, questo cambia il titolo principale quindi devi gestire lo stato. Le cose si complicano anche Tab Bar Controllerperché un cambio di titolo causa effetti collaterali con i Tab Bar Itemtitoli.


10

Per coloro che usano gli storyboard, seleziona semplicemente il genitore (non quello che tiene la vista target) visualizza il frame del controller (assicurati di fare clic sulla barra di navigazione, quindi apri la finestra di ispezione degli attributi, dove troverai tre input del modulo. Il terzo " pulsante indietro "è quello che stiamo cercando.


4
questa è la soluzione migliore se non ti interessa la localizzazione.
MiQUEL,

7

Versione rapida:

Nel tuo ViewController figlio:

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

questo cambierà effettivamente il titolo del controller di visualizzazione precedente nello stack in "TEXT", che è tutt'altro che ideale.
gravitron,

6

Ecco un altro modo per farlo.

Nel controller della vista padre, implementa il seguente metodo:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

Nel controller di visualizzazione figlio, quando si desidera modificare il titolo, funzionerà:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

Non sono mai stato in grado di far funzionare la parentViewControllerproprietà:

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

Non so se è un bug o non lo sto usando correttamente. Afferrare il penultimo controller della vista viewControllersnell'array punta al controller della vista padre e posso chiamare correttamente i metodi padre con quel riferimento.


6

ok. Personalmente odiavo tutte queste opzioni. Quindi mi è venuta in mente la mia.

Sulla base delle informazioni che ho visto. Sembra che il controller della vista Precedente abbia il controllo del proprio pulsante "Indietro" che verrà presentato sul controller della vista push.

Ho creato un metodo Lazy Load per navigationItem sul controller che desidera il pulsante Indietro modificato.

Il mio è un controller acquirente Invite

Invita acquirente è il testo impostato per impostazione predefinita.

ma il pulsante Indietro doveva essere Invita

Ecco il codice che ho usato per creare il pulsante Indietro.

Ho inserito questo codice nella parte superiore del file Implementatio (.m) del controller e ha ignorato automaticamente il metodo del super.

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

Sento che questo è un modo molto più elegante per farlo.

Posiziono questo codice in un unico posto e viene popolato automaticamente quando necessario.

Non è necessario chiamare il codice prima di ogni richiesta push.

Spero che questo ti aiuti


5
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

5

Ecco la risposta:

In viewDidAppear:animated(NON in viewDidLoad) procedere come segue

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

Che se vuoi mantenere la forma del pulsante Indietro.


Non male, tranne che possono vederlo cambiare titoli. Ho provato in viewWillAppear e non funziona.
Travis M.,

5

Nessuna delle soluzioni spiegate qui ha funzionato per me. Quindi quello che ho fatto è stato rimuovere il titolo dalla scena da cui provenivo nel modo seguente:

self.title = @"";

Quindi, quando viene presentata una nuova scena, il testo posteriore non viene visualizzato.

Sono assolutamente d'accordo che questa non è affatto una soluzione chiara, ma ha funzionato e nessuna delle spiegazioni ha funzionato per me.


Amico, devo dirtelo, è il 2017 ed è ancora una seccatura gestire un pulsante Indietro. Il tuo metodo ha funzionato per me e ho finito con il segno "<" anche se volevo la parola "Annulla", ma mi accontenterò di quello che ho ottenuto. :)
AnBisw,

5

Ho scoperto che è meglio cambiare il titolo del controller di visualizzazione corrente nello stack di navigazione con il testo desiderato del pulsante Indietro prima di passare al controller di visualizzazione successivo.

Per esempio

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

Quindi in viewDidAppear ripristina il titolo sul titolo desiderato per il VC originale. Ecco!


5

Per 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

4

Ho scoperto che il modo più semplice per modificare il nome del pulsante Indietro è impostare il titolo dei controller di visualizzazione sul titolo del pulsante Indietro, quindi sostituire il titolo Visualizza nell'elemento di navigazione dei controller di visualizzazione in un'etichetta personalizzata con la sua reale nome.

Come questo:

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

Questo farà apparire il tuo titolo in UINavigationBar come se fosse nativo. Dare al controller di visualizzazione la possibilità di avere titolo separato e titolo del pulsante Indietro.

Nel caso del controller di visualizzazione A e B, A è responsabile di dire come dovrebbe apparire il pulsante Indietro, mentre viene visualizzato B.

MODIFICA: mantiene anche l'aspetto nativo del pulsante Indietro (l'elemento del pulsante della barra con la freccia a sinistra).


4

Anche questo codice funziona. Metti questo sul controller di root del controller di navigazione:

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

4

Sono nuovo in iOS ma fornirò la mia risposta molto semplice di scavalcamento della classe del controller di navigazione. Ho semplicemente scavalcare i metodi push e pop e salvare il titolo del controller della vista precedente. Ci scusiamo per incollare nel blocco js. Era poco confuso su come incollarlo nel normale blocco di codice.

#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

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

E in Swift:

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

3
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

puoi inserirlo dove preferisci nel codice nel controller di pappagallo, che ti consente di avere backbutton differenti per le diverse visualizzazioni figlio.


3

La maggior parte delle soluzioni elimina lo stile originale di BackButton (il pulsante della barra con la freccia a sinistra) mentre aggiunge un normale pulsante con il titolo desiderato.
Quindi per mantenere lo stile originale ci sono 2 modi:
1 °: usare uno stile pulsante non documentato (110 o qualcosa del genere) che preferisco non fare. Ma se vuoi puoi trovare come farlo qui, su StackOverflow.
2 °: usare l'idea di I Trenskow. Mi è piaciuto e lo uso un po 'cambiato.
Invece di sovrascrivere il titolo (NSString *) ho deciso di mantenere il titolo originale nel modo seguente (che mi consente di usare i titoli del pennino e il titolo dato allo stato push tra il btw).

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"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; 
    }
}

Questa soluzione funziona bene e sembra nativa. Inoltre, se lo si utilizza nel metodo viewDidLoad, ne impedisce l'esecuzione più di 1 volta.
Inoltre ho provato una soluzione di Jessedc ma sembra male. Fa sì che la barra del titolo dell'utente sia visibile al volo dall'originale al desiderato BackButton e viceversa.


2

Questo funziona per me come una versione "semplificata" delle precedenti risposte postate.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

Ricordarsi di inserire il codice all'interno del controller della vista padre (ad es. La vista con la vista della tabella o UITableViewController), non la vista figlio o dei dettagli (ad es. UIViewController).

È possibile localizzare facilmente la stringa del pulsante Indietro in questo modo:

backButton.title = NSLocalizedString(@"Back Title", nil);

2

Abbiamo due VC A e B.

Se vuoi cambiare il titolo in B, scrivi questo codice 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

La risposta di Stan fu la migliore. Ma ha anche un problema, quando si utilizza il controller con una barra delle schede e si modifica il titolo del controller, è possibile modificare anche il titolo della barra delle schede, quindi la risposta migliore è cambiare solo view_controller.navigationItem.title e utilizzare view_controller.navigationItem .title nella funzione. La risposta è qui: (Con ARC e aggiungili nella vista della vistaDidLoad)

  static NSString * back_button_title=@"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;
  }

Per quanto mi riguarda, lo rendo una funzione come questa, ho solo la funzione con un codice di riga in viewDidLoad.

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"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

Se vuoi non solo cambiare il testo del pulsante Indietro nello stesso testo e rimanere nella forma originale della freccia sinistra, ma anche fare qualcosa quando l'utente fa clic sul pulsante Indietro, ti consiglio di dare un'occhiata al mio " CustomNavigationController " .


1

PROBLEMA: il testo "Indietro" nella barra di navigazione non può essere sostituito.

REASON: l'etichetta "Indietro" viene impostata nella barra di navigazione dopo aver premuto una vista perché l'attributo .title nel controller della vista padre era impostato su zero (o non inizializzato).

UNA SOLUZIONE: Se imposti self.title = "Qualunque cosa ..." vedrai che invece di "Indietro" apparirà "Qualunque ..." dopo aver premuto il nuovo controller di visualizzazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.