„Przycisk wstecz” a UINavigationController
domyślnie pokazuje tytuł ostatniego widoku w stosie. Czy zamiast tego można umieścić niestandardowy tekst na przycisku Wstecz?
ios
iphone
uinavigationcontroller
Ali Shafai
źródło
źródło
self.navigationController.navigationBar.topItem.title = @"Custom text";
Odpowiedzi:
Z tego linku :
Jak powiedział Tyler w komentarzach:
źródło
release
UIBarButtonItem
UIBarButtonItemStyleBordered
na wywołanie właściwościself.navigationItem.backBarButtonItem.style
. Dokumentacja: developer.apple.com/library/ios/documentation/uikit/reference/…Możesz ustawić tekst w Interface Builder:
Wybierz element nawigacyjny kontrolera ViewController, do którego powróci przycisk Wstecz:
W inspektorze atrybutów panelu narzędzi wprowadź etykietę dla przycisku Wstecz:
Wolałbym takie podejście niż umieszczanie tytułu w kodzie, jak w zaakceptowanej odpowiedzi.
źródło
Używam tego:
źródło
Znalazłem poręczne rozwiązanie tego problemu, ustawiając po prostu tytuł kontrolera przed umieszczeniem innego kontrolera na stosie, na przykład:
Następnie ustaw oryginalny tytuł w
viewWillAppear
, na przykład:Działa to, ponieważ domyślnym zachowaniem
UINavigationController
podczas tworzenia przycisku Wstecz podczas operacji wypychania jest użycie tytułu z poprzedniego kontrolera.źródło
Tytuł przycisku wstecz jest domyślnie tytułem poprzedniego widoku, więc szybką sztuczką, której używam, jest umieszczenie następującego kodu w pliku .m poprzedniego widoku.
źródło
w swojej metodzie init dodaj następujący kod:
następnie dodaj prostą metodę, aby umożliwić odrzucenie kontrolera widoku:
źródło
Dodaj następujący kod w viewDidLoad lub loadView
Przetestowałem to na iPhonie i iPadzie z iOS 9
źródło
navigationController
itopItem
, np .:self.navigationController?.navigationBar.topItem?.title = "Custom Text"
Dodając do odpowiedzi wodzy. Uwaga z dokumentacji firmy Apple, że deklaracja backBarButtonItem jest taka:
Dlatego odpowiedź Reina spowoduje wyciek pamięci, ponieważ zsyntetyzowany ustawiacz przekaże
retain
instancję, która ją przekaże, która nigdy nie jest jawnie udostępniana. Możesz temu zaradzić, używającautorelease
Możesz też wskazać zmienną na instancję, aby móc ją jawnie zwolnić później:
Mam nadzieję że to pomoże!
źródło
źródło
Odkryłem coś interesującego. Jeśli podklasujesz
UINavigationController
i nadpisujeszpushViewController:animated:
metodę i robisz coś takiego: (pamiętaj, że używam ARC)Następnie dla wszystkich,
ViewControllers
które są naciskane za pomocą kontrolera nawigacyjnego, przycisk „Wstecz” będzie w nich automatycznie. Jeśli chcesz zmienić tekst dla niektórych kontrolerów widoku, możesz spróbować rzutować kontroler widoku na określoną klasę lub swój własny niestandardowy protokół (z którego dziedziczy kontroler widoku, który może mieć metodę taką jakbackButtonText
lub coś podobnego), co może dać ci pewne informacje o kontrolerze widoku, które się pojawiają, aby można było dostosować do niego tekst przycisku Wstecz. Teraz tekst przycisku Wstecz jest obsługiwany w miejscu, za które ponosi wyłączną odpowiedzialność. Muszę przyznać, że tworzenie nowego przycisku do zmiany tekstu jest do bani, ale cóż.Czy ktoś może wymyślić powód, dla którego nie miałby tego robić w ten sposób? Przynajmniej nie musisz majstrować przy tytułach kontrolera widoku ani pamiętać o utworzeniu nowego przycisku Wstecz przed naciśnięciem kontrolera widoku na kontrolerze nawigacyjnym.
źródło
odpowiedź wodzy działa dobrze.
Zwróć uwagę, że jeśli naciśniesz więcej niż jeden kontroler widoku, zmieniony tytuł przycisku wstecz pojawi się dla każdego z nich, co może nie być tym, czego chcesz.
W takim przypadku musisz utworzyć niestandardowy UIBarButtonItem za każdym razem, gdy wypychasz kontroler widoku.
Upewnij się również, że zrobiłeś to przed naciśnięciem kontrolera widoku, w przeciwnym razie pojawi się czkawka na ekranie, gdy zmieni się tytuł.
źródło
Rozwijając sugestię Aubrey, możesz to zrobić w kontrolerze widoku dziecka:
utwórz dwie zmienne do przechowywania starych wartości navigationItem.title elementu nadrzędnego i navigationItem elementu nadrzędnego
w
viewDidLoad
, dodaj następujące informacje:w
viewWillDisappear
, dodaj następujące informacje:To nie jest idealne. Zobaczysz, że tytuł widoku nadrzędnego zmienia się w miarę animacji nowego kontrolera. ALE pozwala to na niestandardowe oznaczenie przycisku Wstecz i utrzymanie go w kształcie standardowego przycisku Wstecz.
źródło
Włóż to w siebie
viewDidLoad
, miej nadzieję, że zaowocuje to, czego szukaszźródło
jeśli chcesz ustawić tytuł w kontrolerze ARRIVING (czasem więcej logiki ...) w swift 3 zrób:
w nadchodzącym kontrolerze:
zwykle umieszczam self.setBackButtonNavBar w rozszerzeniu kontrolera.
źródło
Wiem, że to stare pytanie, a odpowiedzi są nieco zaktualizowane!
Prostym sposobem jest zrobienie tego w nadrzędnym ViewController:
czyli ten, który przeniesie Cię do następnego kontrolera widoku.
źródło
Robiąc to w kodzie, usuń styl przycisku Wstecz pliku
UINavigationConroller
. Jeśli dodasz element nawigacji w każdym ze swoich widoków, możesz ustawić tytuł tylnego przycisku wStoryBoard
.źródło