Jak zmienić tekst na przycisku Wstecz


90

Domyślnie przycisk Wstecz używa jako tekstu tytułu kontrolera widoku. Czy mogę zmienić tekst na przycisku Wstecz bez zmiany tytułu kontrolera widoku? Potrzebuję tego, ponieważ mam kontroler widoku, którego tytuł jest za długi do wyświetlenia iw tym przypadku chciałbym wyświetlić tylko „Wstecz” jako podpis przycisku Wstecz.

Próbowałem następujących rzeczy, które nie zadziałały:

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

Dzięki.


3
Pamiętaj, że nie bez powodu przyciski z tyłu mają tytuły. Zmieniając tytuł na „Wstecz”, okradasz użytkownika z informacji o tym, do czego wraca przycisk.
Simon

Odpowiedzi:


167

Próbować

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

Znalazłem to, patrząc na dokumenty backBarButtonItem w dokumentach Apple dla UINavigationItem .


1
Przepraszam, nie mam teraz szansy przetestować tego w tej chwili, ale czy powoduje to zastosowanie lewostronnego kształtu wbudowanych przycisków Wstecz, czy też zachowuje domyślny prostokątny kształt UIBarButtonItem?
Marco

Właściwie nie jestem pewien. Zakładam, że automatycznie zachowałby kształt przycisku Wstecz, odkąd ustawiasz właściwość backButton, ale musisz to przetestować, aby się dowiedzieć. Ja też jestem ciekawa.
Marc W

2
Tak, zadziałało! Tak, zmienia tytuł i tak, zapisuje kształt. Dzięki za pomoc.
Ilya Suzdalnitski

1
Uwaga: przycisk Wstecz jest zachowywany dwukrotnie [1x z przydziału, 1x z zachowania właściwości]. Jeśli jednak nie zmienisz przycisku Wstecz, jest to w rzeczywistości nieszkodliwe.
Kelvin

29
Zobacz komentarz Marco poniżej - powinieneś wywołać to na kontrolerze, który ma zamiar wcisnąć coś nowego, a nie na tym, że kontroler zostanie popchnięty.
Bill

97

Podejście Marca W zadziałało świetnie, gdy zorientowałem się, do którego kontrolera go zastosować: do tego, którego tytuł zostanie zmieniony, a nie do tego na górze. Więc jeśli to jest stos nawigacji:

(bottom)  ControllerA -> ControllerB  (top)

... i chcesz nadać krótszy tytuł dla Kontrolera A na przycisku Wstecz wyświetlanym, gdy KontrolerB jest na górze , zastosuj zmianę właściwości do KontroleraA .

Więc jest to bardziej w kontekście self.title, a nie jak inne ustawiacze przycisków lewego / prawego paska.


13
To bardzo ważny szczegół.
Bill

4
wcochran, działa z scenorysem, po prostu upewnij się, że ustawiłeś przycisk Wstecz kontrolera nadrzędnego. Więc jeśli masz kontroler A, który wskazuje na kontroler B (za pośrednictwem ściegu scenorysu), to aby dostosować tekst dla przycisku Wstecz na kontrolerze B, musisz ustawić właściwość „Przycisk Wstecz” dla kontrolera A w edytorze scenorysu.
przerwać

Dzięki Marco. To, co czułem w związku z tym pytaniem, to to, że wszyscy próbują odpowiedzieć (i odpowiedzieć dobrze), ale nie na pytanie, które jest zadawane. Zasadniczo trafiłeś w gwóźdź w głowę i poprawnie. Dziękuję za to!
theiOSguy

+1 za ważne szczegóły. Powyższa odpowiedź nie zadziała, jeśli nie zrozumiesz TEJ odpowiedzi.
baptzmoffire

Masz rację, klawiatura w nowym MacBooku One jest trochę trudna do przyzwyczajenia.
Mason G. Zhwiti

48

Możesz to zrobić w scenorysie. Znajdź kontroler widoku, do którego chcesz wrócić (ten z długim tytułem), wybierz jego element nawigacji i otwórz Inspektor atrybutów (Alt + Cmd + 4), wstaw niestandardowy tytuł przycisku Wstecz.

wprowadź opis obrazu tutaj


To było dokładnie to, czego potrzebowałem, ponieważ chciałem, aby wszystkie przyciski wstecz miały tekst „Wstecz” zamiast tytułów nawigacyjnych poprzedniego kontrolera.
Dave

8
Warto zauważyć, że tekst przycisku Wstecz jest ustawiony w widoku, z którego został wypchnięty następny kontroler, a nie na kontrolerze widoku, który aktualnie pokazałeś.
Darbio

Jest to dobre rozwiązanie proste, ale proszę nie odchodź zmiana nazwy wszystkich przycisków z powrotem na „Powrót”, to idzie przed HIG i pokonuje części Apple w celu przycisku powrotem. :(
Samuel Goodwin

Działało świetnie. Tylko pamiętaj, aby ZAPISAĆ plik Storyboard. Moja pierwsza próba nie powiodła się, ponieważ nie zauważyłem, że Storyboard nie został zapisany! I tak, zmieniasz przycisk WSTECZ na kontrolerze widoku, z którego przychodzisz!
EricWasTaken

Bardzo dobrze, ale co jeśli chcę zostawić tylko strzałkę bez tekstu? :)
Iurii Vasylenko

40

Dzięki Marco ... to mi pomogło ...

Oto co zrobiłem.

Jeśli używasz tableView do przechodzenia do różnych widoków ... umieść kod:

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

W Twoim didSelectRowAtIndexPath metodzie ... pierwszego Kontrolera ... Kontrolera A.

Po przejściu do kontrolera B przycisk będzie miał tytuł „Wstecz”.


1
Dziękuję drogi @Ben. Dokładnie tego szukałem :).
Arslan

12

Przycisk Wstecz wyciąga swój tekst z tytułu nadrzędnego kontrolera widoku.

W nadrzędnym kontrolerze widoku (kontrolerze widoku, który pojawia się po dotknięciu przycisku Wstecz), ustaw jego własny tytuł jako żądany tekst na przycisku Wstecz.

Na przykład, powiedzmy, że mamy RootViewControllerklasę. Kiedy klikamy komórkę w jej widoku tabeli, wypychamy instancję SecondViewController. Chcemy, aby przycisk Wstecz SecondViewControllerinstancji brzmiał „Strona główna”.

w viewDidLoadmetodzie RootViewController.m :

self.title = @"Home";

w viewDidLoadmetodzie SecondViewController.m :

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

Jeśli chcesz, aby przycisk Wstecz brzmiał „Wstecz”, ustaw tytuł nadrzędnego kontrolera widoku na @"Back";


10

To działa lepiej dla mnie. Próbować :

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

1
Świetna odpowiedź zadziałała idealnie. powinno być oznaczone jako wyłączone.
Muhammad Rizwan

9

Jeśli używasz scenorysu:

  1. Otwórz StoryBoard
  2. W oknie Konspekt dokumentu znajdź kontroler ViewController, do którego chcesz wrócić
  3. Kliknij element nawigacji tego ViewController
  4. W Eksploratorze atrybutów zmień wartość przycisku Wstecz na niestandardowy kafelek

To jest to, ciesz się ...


5

A w MonoTouch działa następująco (w ViewDidLoad kontrolera nadrzędnego):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);

3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

To zadziałało dla mnie.


3

W kontrolerze widoku nadrzędnego ustaw przycisk Wstecz podczas wyświetlania wczytywania:

- (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];

}

Zauważ, że nie musimy autoreleasena końcu dołączać najnowszej wersji iOS.

Mam nadzieję że to pomoże!


1

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

Mi to pasuje. Możesz zamienić „z powrotem” na coś innego.


Odpowiadając za pomocą kodu, zawsze wyjaśniaj, na czym polegał problem z podanym kodem i jak Twój kod rozwiązuje problem.
Lukas Knuth

1

Ten zadziałał dla mnie, jeśli nie chcesz mieć tytułu!

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

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

0

W końcu wiedziałem, dlaczego te odpowiedzi na początku nie działają dla mnie. Ustawiłem tytuł w storyboardzie. Kiedy ustawię tytuł na kodzie. to działa!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

W przyszłości możesz chcieć publikować takie posty jako komentarze do odpowiedzi, która nie zadziałała.
Keith Smiley,

0

Moim rozwiązaniem było ustawienie tytułu, gdy kontroler widoku jest wypychany na stos nawigacji i zresetowanie go za pomocą metody delegata przed zamknięciem pchniętego vc:

Więc wstawiam zmianę tytułu w wywołaniu kontrolera widoku, gdy naciskam drugi kontroler widoku, na przykład:

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

oraz w funkcji wywołania zwrotnego delegata (którą wywołuję w viewWillDissapear):

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

0

Jeśli chcesz nie tylko zmienić tekst przycisku Wstecz i zachować oryginalny kształt strzałki w lewo, ale także zrobić coś, gdy użytkownik kliknie przycisk Wstecz, polecam rozejrzeć się po moim „ CustomNavigationController ”.


0

// Możesz to osiągnąć, ustawiając tytuł w poprzednim kontrolerze widoku, jak pokazano poniżej

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

0

Aby zmienić tytuł przycisku Wstecz, zapoznaj się z poniższym kodem

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`


-1

To zadziałało dla mnie:

self.navigationController.navigationBar.topItem.title = "Back"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.