Jak zmienić tytuł przycisku "wstecz" na pasku nawigacyjnym

Obecnie domyślną wartością przycisku lewego paska jest tytuł widoku, który załadował bieżący, innymi słowy widok, który ma być wyświetlony po naciśnięciu przycisku (przycisk Wstecz).

Chcę zmienić tekst wyświetlony na przycisku na coś innego.

Próbowałem umieścić następujący wiersz kodu w metodzie viewDidLoad kontrolera widoku, ale to chyba nie działa.

self.navigationItem.leftBarButtonItem.title = @"Log Out";
Co mam zrobić? Dzięki.
Author: Kendall Helmstetter Gelner, 2009-09-19

30 answers

To powinno być umieszczone w metodzie, która wywołuje Kontroler ViewController o nazwie "NewTitle". Tuż przed instrukcją push lub popViewController.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];
 336
Author: Jordan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-17 15:48:17

W ChildVC to działało dla mnie...

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

Działa również w Swift!

self.navigationController!.navigationBar.topItem!.title = "Back"
 89
Author: Peter Pan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-19 16:39:00

Oto dokumentacja backBarButtonItem :

" gdy ten element nawigacyjny znajduje się bezpośrednio pod górnym elementem w stos, Kontroler nawigacyjny wyprowadza przycisk Wstecz dla pasek nawigacji z tej pozycji nawigacyjnej. [...] Jeśli chcesz określ niestandardowy obraz lub tytuł dla przycisku Wstecz, możesz przypisać niestandardowy element przycisku paska (z niestandardowym tytułem lub obrazem) do tego nieruchomość zamiast."

Kontroler widoku A (the "rodzic" kontroler widoku):

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

Gdy inny kontroler widoku B znajduje się na górze stosu nawigacji, a aznajduje się tuż pod nim, przycisk Wstecz B będzie miał tytuł "Krótki".

 78
Author: Victor Bogdan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-19 11:10:53

W Xcode 4.5 za pomocą storyboard, zdecydowanie najprostszym rozwiązaniem, jakie znalazłem, gdy wartość przycisku Wstecz nie musi zmieniać się dynamicznie, jest użycie pola "przycisk Wstecz" związanego z elementem nawigacyjnym kontrolera widoku, do którego chcesz przycisk "Wstecz", aby powiedzieć coś innego.

Np. na poniższym zrzucie ekranu chcę przycisk Wstecz dla kontrolera widoku, który naciskam, aby miał "Back" jako tytuł przycisku Wstecz.

Tutaj wpisz opis obrazka

Oczywiście, że nie pracuj, jeśli potrzebujesz przycisku Wstecz, aby za każdym razem powiedzieć coś nieco innego ... są na to wszystkie inne rozwiązania.

 57
Author: john.k.doe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-10 01:46:31

Wiem, pytanie jest bardzo stare, ale znalazłem dobre rozwiązanie.

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

Działa z childView! Testowane z systemem iOS 7.

 41
Author: seniorbenelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 11:14:39

Może jestem już za uproszczeniem, ale z dokumentacji Apple wynika, że:

Jeśli NiestandardowyElement przycisku paska nie jest określony przez żaden z kontrolerów widoku, używany jest domyślny przycisk Wstecz, a jego tytuł jest ustawiony na wartość właściwości title poprzedniego kontrolera widoku-czyli kontrolera widoku o jeden poziom niżej na stosie.

Rozwiązanie zaznaczone powyżej poprawne Ustawia domyślną pozycję przycisku z kontrolera nadrzędnego. To poprawna odpowiedź, ale rozwiązuję problem zmieniając Właściwość self.title UIViewController tuż przed wciśnięciem nowego kontrolera na stos NavigationController.

To automatycznie aktualizuje tytuł przycisku wstecz na następnym kontrolerze i dopóki ustawisz self.title z powrotem na to, co powinno być w viewWillAppear, nie widzę tej metody powodującej zbyt wiele problemów.

 25
Author: Jessedc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-02 23:57:58

To działa lepiej dla mnie. Try:

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
 18
Author: Felipe FMMobile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 13:11:24

W Swift / iOS8 zadziałało dla mnie:

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

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

Ported from Felipe ' s answer.

 18
Author: Duncan Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-22 00:04:09

Ok, oto sposób. Jeśli masz kontroler widoku "pierwszy" i nawigujesz po innym kontrolerze widoku "drugi", naciskając przycisk lub itp. musisz popracować. Najpierw musisz utworzyć BarButtonItem w" drugiej " metodzie viewDidLoad kontrolera widoku w ten sposób;

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

Gdy to zrobisz, musisz napisać do kodu dla akcji "btnBack" w tym samym .m file like this;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}
To wszystko.
 17
Author: EEE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-06 13:30:22

Miałem kontroler widoku nadrzędnego z bardzo długim tytułem. Spowodowało to wykrwawienie się tekstu przycisku Wstecz w tytule kontrolera widoku potomnego.

Po wypróbowaniu kilku różnych rozwiązań, właśnie to zrobiłem (rozszerzając @john."k. Doe approach"): {]}

Using Xcode 7.2, Swift 2

  1. w Storyboardzie dodaj Navigation Item do sceny kontrolera widoku rodzica (nie dziecka VC)

pozycja nawigacyjna

  1. w polu Attributes Inspector Nowego Navigation Item wpisz znak space w polu Back Button. Więcej na ten temat później.

pozycja nawigacyjna w hierarchii widoków

Dodaj znak spacji do pola przycisku Wstecz

  1. w kontrolerze widoku rodzica Dodaj następujący kod:

Fragment:

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

Explanation:

Przycisk Wstecz należy do kontrolera widoku nadrzędnego. Navigation Item daje uchwyt do przycisk Wstecz, dzięki czemu można ustawić tytuł w kodzie lub w Storyboardzie.

Uwaga:

Jeśli zostawisz Navigation Item Back Button tekst jako domyślny pusty ciąg, tytuł przycisku Wstecz stanie się"wstecz".

Inne podejścia działają, po co używać tego?:

Chociaż możliwe jest nadpisanie tytułu przycisku wstecz na kontrolerze widoku potomnego, uzyskanie uchwytu do niego było wyzwaniem, dopóki nie błysnął na krótko na ekranie.

Niektóre z podejść zbuduj nowy przycisk Wstecz i zastąp istniejący. Jestem pewien, że to działa, i prawdopodobnie konieczne w niektórych przypadkach użycia. Ale wolę wykorzystać istniejące API, gdy to możliwe.

Zmiana title kontrolera widoku nadrzędnego jest najszybszym rozwiązaniem w niektórych sytuacjach. Jednak zmienia to tytuł nadrzędny, więc musisz zarządzać stanem. Z Tab Bar Controller robi się też bałagan, ponieważ zmiany tytułu powodują skutki uboczne w przypadku tytułów Tab Bar Item.

 14
Author: Robert Chen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-20 18:05:58

Dla tych, którzy używają storyboardów, po prostu wybierz ramkę kontrolera widoku nadrzędnego (nie ten, który trzyma widok docelowy) (upewnij się, że klikniesz prawo na pasku nawigacyjnym, a następnie otwórz Inspektora atrybutów, gdzie znajdziesz trzy wejścia formularza. Trzeci "przycisk Wstecz" jest to, że szukamy.

 9
Author: pedrouan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-05 21:14:32

Wersja Swift:

In your child ViewController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}
 7
Author: buxik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-27 15:19:31

Jest na to inny sposób.

W kontrolerze widoku nadrzędnego zaimplementuj następującą metodę:

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

W kontrolerze widoku potomnego, gdy chcesz zmienić tytuł, będzie to działać:

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

Nigdy nie udało mi się uruchomićparentViewController Nieruchomości:

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

Nie wiem, czy to błąd, czy nie używam go prawidłowo. Ale pobranie przedostatniego kontrolera widoku w tablicy viewControllers wskazuje na kontroler widoku nadrzędnego i mogę wywołać metody nadrzędne poprawnie z tym odniesieniem.

 6
Author: Alex Reynolds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-19 20:38:59

Ok. Osobiście nienawidziłem tych wszystkich opcji. Dlatego wymyśliłem swoje.

Na podstawie informacji, które widziałem. Wygląda na to, że poprzedni kontroler widoku kontroluje swój własny przycisk "Wstecz", który zostanie wyświetlony na wciśniętym kontrolerze widoku.

Stworzyłem metodę leniwego ładowania dla navigationItem na kontrolerze, który chce zmienić przycisk Wstecz.

Mój jest kontrolerem Invite Buyer

Invite Buyer to tekst ustawiony przez default.

But the back button needed to be Invite

Oto kod, którego użyłem do utworzenia przycisku Wstecz.

Umieściłem ten kod w górnej części implementacji kontrolera (.m) plik i automatycznie nadpisuje metodę 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;
}
Uważam, że jest to o wiele bardziej elegancki sposób, aby to osiągnąć.

Umieszczam ten kod w jednym miejscu i jest on automatycznie wypełniany w razie potrzeby.

Nie trzeba wywoływać kodu przed każdym naciśnięciem Prośba.

Hope this helps

 5
Author: The Lazy Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-14 02:51:05
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];
 5
Author: Gopikrishna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-05 12:39:57

Oto odpowiedź:

W viewDidAppear:animated (nie w viewDidLoad) wykonaj następujące czynności

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

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

Że jeśli chcesz zachować kształt tylnego przycisku.

 5
Author: Basheer_CAD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-22 11:18:43

Żadne z wyjaśnionych tutaj rozwiązań nie zadziałało dla mnie. Więc usunąłem tytuł ze sceny, z której pochodzę w następujący sposób:

self.title = @"";

Więc kiedy nowa scena jest wyświetlana tekst z tyłu nie pojawia się.

Zgadzam się, że nie jest to w ogóle jasne rozwiązanie, ale zadziałało i Żadne z wyjaśnionych nie zadziałało.
 5
Author: Javier Calatrava Llavería,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-17 08:38:42

Dla 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
Author: Ryan R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-19 08:40:54

Odkryłem, że najprostszym sposobem na zmianę nazwy przycisku wstecz jest ustawienie tytułu kontrolerów widoku na tytuł przycisku Wstecz, a następnie zastąpienie titleView w pozycji nawigacyjnej kontrolerów widoku na niestandardową etykietę z jego prawdziwą nazwą.

Tak:

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

To sprawi, że twój tytuł w UINavigationBar będzie wyglądał tak, jakby był natywny. Nadanie kontrolerowi widoku możliwości oddzielenia przycisku title i back tytuł.

W przypadku kontrolera widoku A i B, A jest odpowiedzialny za wskazanie, jak powinien wyglądać przycisk wstecz, podczas gdy B jest wyświetlany.

EDIT: to również zachowuje natywny wygląd przycisku Wstecz(lewy przycisk paska strzałkowego).

 4
Author: Trenskow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 09:53:23

Ten kod też działa. Umieść to na głównym kontrolerze kontrolera nawigacyjnego:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
 4
Author: user2666203,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-15 15:39:31

Odkryłem, że najlepiej jest zmienić tytuł bieżącego kontrolera widoku w stosie nawigacyjnym na żądany tekst przycisku wstecz przed naciśnięciem następnego kontrolera widoku.

Na przykład

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

Następnie w viewDidAppear Ustaw tytuł z powrotem do żądanego tytułu dla oryginalnego VC. Voila!

 4
Author: OneInABajilian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-11 20:24:38

Jestem nowy w iOS, ale podam bardzo prostą odpowiedź o nadpisaniu klasy kontrolera nawigacyjnego. Mam proste nadpisanie metod push i pop i zapisanie tytułu poprzedniego kontrolera widoku. Przepraszam za wklejenie w bloku js. Był trochę zdezorientowany, jak go ominąć w normalnym bloku kodu.

#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
Author: Sergey Brazhnik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-13 11:45:04

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

I w języku Swift:

self.navigationController?.navigationBar.backItem?.title = "TEXT"
 4
Author: onmir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-15 07:44:41
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

Możesz umieścić go w kodzie w kontrolerze parrent, co pozwala na różne przyciski dla różnych widoków potomnych.

 3
Author: chikuba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-31 11:04:54

Większość rozwiązań zabija oryginalny styl BackButton (lewy strzałkowy przycisk paska) podczas dodawania zwykłego przycisku z żądanym tytułem.
Aby zachować oryginalny styl są 2 sposoby:
1st: aby użyć nieudokumentowanego stylu przycisku (110 lub coś w tym stylu), którego wolę nie robić. Ale jeśli chcesz, możesz dowiedzieć się, jak to zrobić tutaj, na stackoverflow.
2. wykorzystać i pomysł Trenkowa. Podobało mi się i używam go trochę zmieniony.
Zamiast nadpisywać - (NSString*)tytuł postanowiłem aby zachować oryginalny tytuł w następujący sposób (co pozwala mi używać tytułów nib, jak również podanego tytułu w stanie push 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; 
    }
}

To rozwiązanie działa dobrze i wygląda natywnie. Również jeżeli zastosujemy go w metodzie viewDidLoad, uniemożliwi wykonanie więcej niż 1 raz.
Próbowałem też rozwiązania Jessedc, ale wygląda źle. Powoduje to widoczną dla użytkownika zmianę paska tytułu w locie z oryginalnego na żądany i z powrotem przycisk.

 3
Author: Stan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-02 14:51:15

To działa dla mnie jako" uproszczona " wersja poprzednich opublikowanych odpowiedzi.

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

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

Pamiętaj, aby umieścić kod wewnątrz kontrolera widoku nadrzędnego (np. widoku, który ma widok tabeli lub UITableViewController), Nie widoku podrzędnego lub szczegółowego (np. UIViewController).

Możesz łatwo zlokalizować łańcuch przycisku Wstecz w następujący sposób:

backButton.title = NSLocalizedString(@"Back Title", nil);
 2
Author: Lex L.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-23 20:17:50

Odpowiedź Stana była najlepsza. Ale ma to również problem, gdy używasz kontrolera z paskiem kart i zmieniasz tytuł kontrolera, możesz zmienić tytuł paska kart too.So najlepszą odpowiedzią jest zmiana kontrolera view_controller.navigationItem.tylko title i użyj kontrolera view_controller.navigationItem.tytuł w funkcji. Odpowiedź jest tutaj: (z ARC i dodaj je do viewDidLoad)

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

W sobie używam, robię to taką funkcją, wystarczy mieć funkcję z jednym kodem liniowym w 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
Author: jtianling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 22:51:24

Jeśli chcesz nie tylko zmienić tekst przycisku Wstecz na ten sam tekst i pozostać oryginalnym kształtem strzałki w lewo, ale także zrobić coś, gdy użytkownik kliknie przycisk Wstecz, polecam rozejrzeć się po moim " CustomNavigationController ".

 1
Author: jianpx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-31 05:02:33

PROBLEM: nie można zastąpić tekstu" wstecz " na pasku nawigacyjnym.

Powód: Etykieta "wstecz" jest ustawiana na pasku nawigacyjnym po naciśnięciu widoku, ponieważ .atrybut title w widoku nadrzędnym kontroler został ustawiony na nil (lub nie został zainicjowany).

Jedno rozwiązanie: jeśli ustawisz jaźń.title = " cokolwiek..."zobaczysz, że zamiast" z powrotem "pojawi się" cokolwiek..."po naciśnięciu nowego kontrolera widoku.

 1
Author: Javier Calatrava Llavería,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-03 18:08:18

Użyj poniższego wiersza kodu:

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
Author: Payal Maniyar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 12:48:57