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.

Ilya Suzdalnitski
źródło
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 .

Marc W.
źródło
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.

Marco
źródło
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

alyoka
źródło
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”.

Ben Call
źródło
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";

Rose Perrone
źródło
10

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

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Felipe FMMobile
źródło
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ę ...

AntonijoDev
źródło
5

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

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

To zadziałało dla mnie.

user1004911
źródło
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!

Zorayr
źródło
1

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

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

Ohmer
źródło
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];
gpichler
źródło
1
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
user2783798
źródło
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];
user2547667
źródło
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";
}
Despotovic
źródło
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 ”.

jianpx
źródło
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"
}
John Carto
źródło
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`
Kiran K.
źródło
0

W Swift5 nie można edytować backBarButtom. Dlatego musimy najpierw ukryć backBarButtom, a następnie użyć dostosowanego leftbarButtom, aby zastąpić backBarButtom. Oto szczegółowe rozwiązanie: https://stackoverflow.com/a/63868300/13939003

Michael Lin Liu
źródło
-1

To zadziałało dla mnie:

self.navigationController.navigationBar.topItem.title = "Back"
Skalisty
źródło