Obecnie wartością domyślną lewego przycisku paska jest tytuł widoku, który załadował bieżący, innymi słowy widok, który ma być wyświetlany po naciśnięciu przycisku (przycisk Wstecz).
Chcę zmienić tekst wyświetlany na przycisku na inny.
Próbowałem umieścić następujący wiersz kodu w metodzie viewDidLoad kontrolera widoku, ale wydaje się, że nie działa.
self.navigationItem.leftBarButtonItem.title = @"Log Out";
Co powinienem zrobić?
Dzięki.
-viewDidLoad:
W ChildVC to zadziałało dla mnie ...
Działa również w Swift!
źródło
Oto dokumentacja backBarButtonItem :
Wyświetl kontroler A ( „nadrzędny” kontroler widoku):
Kiedy dowolny inny kontroler widoku B znajduje się na górze stosu nawigacji, a A znajduje się tuż pod nim, przycisk powrotu B będzie miał tytuł „Krótki” .
źródło
w Xcode 4.5 za pomocą scenorysu zdecydowanie najprostszym rozwiązaniem, jakie znalazłem, gdy wartość przycisku Wstecz nie musi się dynamicznie zmieniać, to użycie pola „Przycisk Wstecz” powiązanego z elementem nawigacyjnym kontrolera widoku, do którego chcę, aby przycisk „Wstecz” powiedział coś innego.
np. na zrzucie ekranu poniżej, chcę przycisk Wstecz dla kontrolerów widoków, które naciskam, aby mieć tytuł „Wstecz” jako tytuł przycisku Wstecz.
oczywiście to nie zadziała, jeśli za każdym razem będziesz potrzebować przycisku Wstecz, aby za każdym razem mówić coś nieco innego… istnieją tutaj inne rozwiązania.
źródło
Wiem, że pytanie jest bardzo stare, ale znalazłem dobre rozwiązanie.
Działa z childView! Testowane z iOS 7.
źródło
Być może jestem zbyt uproszczony, ale z dokumentacji Apple brzmi:
Rozwiązanie oznaczone powyżej jako poprawne ustawia domyślny element przycisku nadrzędnego kontrolera. To właściwa odpowiedź, ale rozwiązuję problem, zmieniając
self.title
właściwość UIViewController tuż przed wypchnięciem nowego kontrolera na stos Nawigacji.To automatycznie aktualizuje tytuł przycisku Wstecz na następnym kontrolerze i dopóki nie
self.title
wrócisz do tego, co powinno byćviewWillAppear
, nie widzę, aby ta metoda powodowała zbyt wiele problemów.źródło
To działa dla mnie lepiej. Próbować :
źródło
W Swift / iOS8 działało dla mnie:
Przeniesiony z odpowiedzi Felipe.
źródło
self.navigationController?.navigationBar.topItem?.backBarButtonItem
Ok, oto jest droga. Jeśli masz kontroler widoku „pierwszy” i poruszasz się po innym kontrolerze widoku „drugi”, naciskając przycisk itp., Musisz wykonać trochę pracy. Najpierw musisz utworzyć BarButtonItem w metodzie ViewDidLoad kontrolera „drugiego” widoku w ten sposób;
Po wykonaniu tej czynności musisz napisać w kodzie dla akcji „btnBack” w tym samym pliku .m;
To wszystko.
źródło
leftBarButtonItem
nie ma wyglądu abackBarButtonItem
, jeśli jest to ważne w projekcie aplikacji.Miałem nadrzędny kontroler widoku o naprawdę długim tytule. Spowodowało to krwawienie tekstu przycisku wstecz do tytułu kontrolera widoku potomnego.
Po wypróbowaniu wielu różnych rozwiązań, właśnie to skończyłem (rozwijając podejście @ john.k.doe):
Korzystanie z Xcode 7.2, Swift 2
Navigation Item
do dominującej View Controller sceny (nie dziecko VC)Attributes Inspector
swoim nowymNavigation Item
wpiszspace
znak wBack Button
polu. Więcej na ten temat później.skrawek:
Wyjaśnienie:
Rodzaj przycisku Wstecz należy do nadrzędnego kontrolera widoku.
Navigation Item
Daje dojście do przycisku tyłu, dzięki czemu można ustawić tytuł w kodzie lub w serii ujęć.Uwaga:
Jeśli pozostawisz
Navigation Item
Back Button
tekst jako domyślny pusty ciąg, tytuł przycisku Wstecz zmieni się na „Wstecz”.Inne podejścia działają, po co korzystać z tego ?:
Chociaż można zastąpić tytuł przycisku Wstecz na kontrolerze widoku potomnego, trudno było go uchwycić, dopóki nie błysnął krótko na ekranie.
Niektóre podejścia konstruują nowy przycisk Wstecz i zastępują istniejący. Jestem pewien, że to działa i prawdopodobnie konieczne w niektórych przypadkach użycia. Ale wolę wykorzystać istniejące interfejsy API, jeśli to możliwe.
Zmiana
title
nadrzędnego kontrolera widoku jest najszybszym rozwiązaniem w niektórych sytuacjach. Zmienia to jednak tytuł nadrzędny, więc musisz zarządzać stanem. Sprawy również stają sięTab Bar Controller
nieporządne, ponieważ zmiany tytułów powodują skutki uboczne związane zTab Bar Item
tytułami.źródło
Dla tych, którzy używają scenorysów, po prostu wybierz macierzystą (nie tą, która trzyma widok docelowy) ramkę kontrolera widoku (pamiętaj, aby kliknąć prawym przyciskiem myszy pasek nawigacji, a następnie otworzyć inspektora atrybutów, w którym znajdziesz trzy dane wejściowe formularza. Trzeci „ przycisk Wstecz ”to to, czego szukamy.
źródło
Wersja szybka:
W twoim dziecku ViewController:
źródło
Oto inny sposób, aby to zrobić.
W nadrzędnym kontrolerze widoku zaimplementuj następującą metodę:
W kontrolerze widoku dziecka zmiana tytułu będzie działać:
Nigdy nie udało mi się uruchomić
parentViewController
nieruchomości:Nie wiem, czy to błąd, czy nie używam go poprawnie. Ale przechwytywanie przedostatniego kontrolera widoku w
viewControllers
tablicy wskazuje na nadrzędny kontroler widoku i mogę poprawnie wywoływać metody nadrzędne za pomocą tego odwołania.źródło
dobrze. Osobiście nienawidziłem tych wszystkich opcji. Dlatego wymyśliłem własne.
Na podstawie informacji, które widziałem. Wygląda na to, że poprzedni kontroler widoku kontroluje własny przycisk „Wstecz”, który będzie prezentowany na kontrolerze wypychanym.
W kontrolerze utworzyłem metodę Lazy Load dla elementu nawigacji, który chce zmienić przycisk Wstecz.
Mój jest kontrolerem zaproś kupującego
Zaproś kupującego to tekst ustawiony domyślnie.
ale przycisk Wstecz musiał być Zaproś
Oto kod, którego użyłem do utworzenia przycisku Wstecz.
Umieściłem ten kod w górnej części pliku Implementatora kontrolera (.m) i automatycznie zastąpił on metodę super.
Myślę, że jest to o wiele bardziej elegancki sposób na osiągnięcie tego.
Umieszczam ten kod w jednym miejscu i automatycznie zapełnia się w razie potrzeby.
Nie ma potrzeby wywoływania kodu przed każdym żądaniem push.
Mam nadzieję że to pomoże
źródło
źródło
Oto odpowiedź:
W
viewDidAppear:animated
(NIE wviewDidLoad
) wykonaj następujące czynnościŻe jeśli chcesz zachować kształt przycisku wstecz.
źródło
Żadne z opisanych tutaj rozwiązań nie działało dla mnie. Więc to, co zrobiłem, to usunięcie tytułu ze sceny, z której pochodzę, w następujący sposób:
self.title = @"";
Tak więc kiedy prezentowana jest nowa scena, tekst nie pojawia się.
Absolutnie zgadzam się, że nie jest to wcale jasne rozwiązanie, ale zadziałało i żadne wyjaśnienie nie działało dla mnie.
źródło
Przekonałem się, że najlepiej jest zmienić tytuł bieżącego kontrolera widoku w stosie nawigacji na pożądany tekst przycisku Wstecz przed przejściem do następnego kontrolera widoku.
Na przykład
Następnie w viewDidAppear ustaw tytuł z powrotem na żądany tytuł dla oryginalnej VC. Voila!
źródło
Dla Swift:
źródło
Przekonałem się, że najłatwiejszym sposobem zmiany nazwy przycisku Wstecz jest ustawienie tytułu kontrolerów widoku na tytuł przycisku Wstecz, a następnie zamiana titleView w elemencie nawigacyjnym kontrolerów widoku na niestandardową etykietę z rzeczywistą etykietą imię.
Lubię to:
CustomViewController.m
To sprawi, że twój tytuł w UINavigationBar będzie wyglądał, jakby był rodzimy. Umożliwiając kontrolerowi widoku oddzielny tytuł i tytuł przycisku wstecz.
W przypadku kontrolera widoku A i B, A odpowiada za określenie, jak powinien wyglądać jego przycisk powrotu, podczas gdy wyświetla się B.
EDYCJA: Zachowuje to także natywny wygląd przycisku Wstecz (element przycisku strzałki w lewo).
źródło
Ten kod też działa. Umieść to na kontrolerze głównym kontrolera nawigacji:
źródło
Jestem nowy w iOS, ale podam moją bardzo prostą odpowiedź na przesłonięcie klasy kontrolera nawigacji. Mam proste zastąpienie metod push i pop i zapisuję tytuł poprzedniego kontrolera widoku. Przepraszamy za wklejenie w bloku js. Nie byłem trochę zdezorientowany, jak to wkleić w normalnym bloku kodu.
źródło
self.navigationController.navigationBar.backItem.title = @"TEXT";
A w Swift:
źródło
możesz umieścić go gdziekolwiek chcesz w kodzie w kontrolerze bieżącym, co pozwala mieć różne przyciski wsteczne dla różnych widoków potomnych.
źródło
Większość rozwiązań zabija oryginalny styl BackButton (lewy przycisk paska ze strzałką), jednocześnie dodając zwykły przycisk z żądanym tytułem.
Aby zachować oryginalny styl, istnieją 2 sposoby:
1. Aby użyć nieudokumentowanego stylu przycisków (110 lub coś w tym stylu), czego wolę nie robić. Ale jeśli chcesz, możesz dowiedzieć się, jak to zrobić tutaj, na stackoverflow.
2.: Wykorzystanie idei Trenskowa. Podobało mi się i używam go nieco zmienionego.
Zamiast nadpisywania - (NSString *) tytułu postanowiłem zachować oryginalny tytuł w następujący sposób (co pozwala mi korzystać z tytułów stalówki, a także z tytułu nadanego w stanie push btw).
To rozwiązanie działa dobrze i wygląda na natywne. Również użycie go w metodzie viewDidLoad zapobiega wykonaniu więcej niż 1 raz.
Próbowałem też rozwiązania Jessedca, ale źle to wygląda. Powoduje to widoczną zmianę paska tytułu użytkownika w locie z oryginału na pożądany przycisk BackButton iz powrotem.
źródło
Działa to dla mnie jako „uproszczona” wersja wcześniej opublikowanych odpowiedzi.
Pamiętaj, aby wstawić kod do nadrzędnego kontrolera widoku (np. Widok zawierający widok tabeli lub UITableViewController), a nie widok potomny lub szczegółowy (np. UIViewController).
Możesz łatwo zlokalizować ciąg przycisku Wstecz w następujący sposób:
źródło
Mamy dwa VC A i B.
Jeśli chcesz zmienić tytuł w B, wpisz ten kod w A
Swift 4.1 Xcode 9.4
źródło
Odpowiedź Stana była najlepsza. Ale ma również problem, gdy używasz kontrolera z paskiem kart i zmieniasz tytuł kontrolera, możesz także zmienić tytuł paska kart. Najlepszą odpowiedzią jest zmiana tylko view_controller.navigationItem.title i użycie view_controller.navigationItem .title w funkcji. Odpowiedź jest tutaj: (za pomocą ARC i dodaj je do widoku viewDidLoad)
W moim użyciu, robię to taką funkcję, po prostu mam funkcję z jednym kodem linii w viewDidLoad.
źródło
Jeśli chcesz nie tylko zmienić tekst przycisku Wstecz na ten sam tekst i zachować oryginalny kształt lewej strzałki, ale także zrobić coś, gdy użytkownik kliknie przycisk Wstecz, polecam rozejrzeć się po moim „ CustomNavigationController ” .
źródło
PROBLEM: Nie można zastąpić tekstu „Wstecz” na pasku nawigacyjnym.
POWÓD: Etykieta „Wstecz” jest ustawiana na pasku nawigacyjnym po wypchnięciu widoku, ponieważ atrybut .title w nadrzędnym kontrolerze widoku został ustawiony na zero (lub nie został zainicjowany).
JEDNO ROZWIĄZANIE: Jeśli ustawisz self.title = „Cokolwiek ...” zobaczysz, że zamiast „Wstecz” pojawi się „Cokolwiek ...” po naciśnięciu nowego kontrolera widoku.
źródło