Jak dostosować przycisk cofania nawigacji w iOS 7 i nowszych bez tytułu? (tj. tylko ze strzałką)
self.navigationItem.leftBarButtonItem = self.editButtonItem;
Zastanawiam się tylko, czy mają jakieś self.backButtonItem;
LUB
coś takiego?
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemBACK
target:self action:@selector(back)];
ios
user-interface
uinavigationbar
Brzdąc
źródło
źródło
Odpowiedzi:
To właściwie całkiem proste, oto co robię:
Cel C
Swift 2
Szybki 3
Umieść tę linię w kontrolerze widoku, który naciska na stos ( poprzedni kontroler widoku ). Nowo wciśnięty przycisk powrotu kontrolera widoku pokaże teraz wszystko, co wstawisz dla initWithTitle, czyli w tym przypadku pusty ciąg.
źródło
prepareForSegue
kontrolerze widoku i działało idealnie.Znalazłem prosty sposób na utworzenie przycisku Wstecz za pomocą pojedynczej strzałki na iOS.
Załóżmy, że masz kontroler nawigacji, który wybiera ViewA z ViewB. W IB wybierz pasek nawigacji ViewA, powinieneś zobaczyć następujące opcje: Tytuł, Monit i Przycisk Wstecz.
Widok Opcje paska nawigacji
Sztuką jest wybranie tytułu przycisku Wstecz kontrolera widoku przeznaczenia (ViewB) w opcjach poprzedniego kontrolera widoku (Widok A). Jeśli nie wypełnisz opcji „Przycisk Wstecz”, iOS automatycznie umieści tytuł „Wstecz” wraz z tytułem poprzedniego kontrolera widoku. Tak więc musisz wypełnić tę opcję pojedynczym miejscem.
Wypełnij miejsce w opcji „Przycisk Wstecz”
Wynik:
źródło
Back Button
ustawiony pojedynczy znak spacji (tj. zarówno ViewA, jak i ViewB)Po prostu użyj obrazu!
OBJ-C :
SWIFT 4 :
Icon-Back.png
[email protected]
[email protected]
źródło
navigationController?.interactivePopGestureRecognizer?.delegate = self
robi sztuczkę, aby zatrzymać gest machnięcia wstecziOS7 ma nowe reguły interfejsu, więc lepiej jest zachować przynajmniej strzałkę wstecz, kiedy naciskasz UIView. Bardzo łatwo jest programowo zmienić tekst „wstecz”. Po prostu dodaj ten kod przed wypchnięciem widoku (lub przygotujForSegue, jeśli używasz StoryBoards):
Spowoduje to zmianę domyślnego tekstu „Wstecz”, ale zachowa strzałkę wstecz w stylu iOS7. Możesz także zmienić kolor odcienia strzałki wstecz przed naciśnięciem widoku:
Mam nadzieję, że to ci pomoże!
źródło
Nic więcej nie musisz robić. Możesz to samo osiągnąć poprzez samą scenorys.
Wystarczy przejść do głównego kontrolera nawigacyjnego i zwolnić miejsce. Pamiętaj nie o kontrolerze, w którym chciałeś przycisk Wstecz bez tytułu, ale do głównego kontrolera nawigacji.
źródło
Chociaż odpowiedź Kyle'a Begemana całkowicie rozwiązuje problem, dość denerwujące jest posiadanie tego kodu w każdym możliwym kontrolerze widoku. Skończyło się na prostej
UINavigationItem
kategorii. Uwaga, bądźcie smokami! Przepraszam, mam na myśli, swizzling:źródło
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000) forBarMetrics:UIBarMetricsDefault];
( źródło ) - może być nieco mniej elegancki, ale zamiatanie czułem się jak przesadaUINavigationItem
metodą własną, nie wiąże się z nią dziedziczenie. I_cmd
jest bardzo mało prawdopodobne, aby być zaangażowanym w getter. W każdym razie jest to dobra uwaga. Wszyscy więc, jeśli masz w swoim projekcie któregoś z tych licznych pomocników, zrób to tutaj.EDYCJA: 2014-04-09: Gdy zyskałem reputację, jest mi przykro, ponieważ nie używam już tej sztuczki. Polecam odpowiedź Kyle'a. Zauważ również, że
self
ofself.navigationItem.backBarButtonItem
nie jest kontrolerem widoku, przycisk powrotu jest wyświetlany, ale poprzedni kontroler widoku, do którego chcesz wrócić.Jeśli nie potrzebujesz tekstu tytułu dla poprzedniego kontrolera widoku, po prostu wypełnij tytuł pustym łańcuchem;
Zapobiegnie to pokazywaniu „wstecz” za pomocą szewronu na kontrolerze widoku wypychanego.
EDYCJA: Nawet jeśli używasz niepustego tekstu tytułu, ustawianie tytułu poprzedniego kontrolera widoku
viewWillAppear:
działa, z wyjątkiem tego, że tytuł może migać w mgnieniu oka, gdy kontroler widoku się pojawi. Wydaje mi się, że „aplikacja twitterowa” robi bardziej subtelny hack, aby uniknąć migotania.źródło
To działa, ale usunie tytuł poprzedniego elementu, nawet jeśli wrócisz do niego:
Wystarczy ustawić tę właściwość na
viewDidLoad
wciśniętym kontrolerze widoku.źródło
viewWillAppear
więc zawsze jest ustawiony poprawnie.Tak to robię i najprostszy, działa i najczystszy sposób to zrobić.
Działa, jeśli jest osadzony
Navigation Controller
Szybki 3
W
viewDidLoad
dodam to do widoku kontrolera chcesz przycisk Wstecz, aby być tylko strzałka.Różnica tego w stosunku do odpowiedzi @Kyle Begemana polega na tym, że wywołujesz to na kontrolerze widoku, że chcesz, aby przycisk powrotu był tylko strzałką, a nie na kontrolerze pchania stosu.
źródło
Nie masz dostępu do nawigacji backButtonItem w sposób, w jaki chcesz, musisz utworzyć własny przycisk Wstecz, jak poniżej:
I oczywiście:
źródło
Cel: dostosowanie wszystkich przycisków Wstecz
UINavigationBar
do białej ikonyKroki: 1. w metodzie AppDelete „didFinishLaunchingWithOptions”
2. w
viewDidLoad
metodzie wspólnej superklasyViewController
:źródło
SWIFT 4
Dla tych, którzy chcą tworzyć niestandardowe przyciski Wstecz, a także usunąć ich tytuł, użyj następującego fragmentu kodu w kontrolerze widoku, który naciska nowy:
W celu bardziej uniwersalnego zastosowania wykonaj następujące czynności:
Utwórz funkcję uniwersalną w następujący sposób:
Następnie użyj go w kontrolerach widoku w następujący sposób:
źródło
Prosty hack z iOS6 działa również na iOS7:
Edycja: Nie używaj tego hacka. Zobacz komentarz po szczegóły.
źródło
możesz tego użyć. Działa to dla mnie idealnie, po prostu dodając
UIButton
custumview dlaUIBarButtonItem
.Wypróbuj poniższy kod
źródło
Utwórz tytuł
UILabel
z żądanym tytułem dla kontrolera widoku głównego i przypisz go do kontrolera widokunavigationItem.titleView
.Teraz ustaw tytuł na pusty ciąg, a następny kontroler widoku, który naciśniesz, będzie miał przycisk Wstecz bez tekstu.
źródło
źródło
Wszystkie odpowiedzi nie rozwiązują problemu. Niedopuszczalne jest ustawianie tytułu przycisku Wstecz w każdym kontrolerze widoku, a dodanie przesunięcia do tytułu nadal powoduje przesunięcie tytułu Kontrolera widoku w prawo.
Oto metoda wykorzystująca metodę swizzling, wystarczy utworzyć nowe rozszerzenie do UINavigationItem
źródło
Zastosowałem następujący kod w viewDidLoad i działa:
Tylko do aktualizacji używam Vector Icon
źródło
Możesz podklasować UINavigationController, ustawić się jako delegat i ustawić backBarButtonItem w metodzie delegowanej
navigationController:willShowViewController:animated:
źródło
Cofnij tytuł pusty
Zmień obraz z powrotem
źródło
Korzystam z tego rozwiązania od mniej więcej iOS 5 bez żadnych problemów. Zrobiłem funkcję narzędzia, którą wywołuję w moich kontrolerach widoku. Musisz to zrobić albo w viewDidLoad, albo w dowolnym późniejszym punkcie.
W niektórych przypadkach element nawigacyjny może już istnieć, w innych przypadkach należy go utworzyć. To uwzględnia oba te przypadki bez bałaganu w tytule elementu nawigacyjnego. Pozwala usunąć tytuł, po prostu przekazując go
@""
.źródło
Jedyny sposób, który działał dla mnie to:
AKTUALIZACJA:
Kiedy zmieniłem flagę animacji segue na true (wcześniej było to fałsz), jedynym sposobem, który działał dla mnie, było:
źródło
Jeśli masz dwa ViewController (FirstVC, SecondVC) Osadzone w Nawigatorze, a chcesz, aby w SecondVC była tylko strzałka wstecz.
Możesz tego spróbować w ViewDidLoad firmy FirstVC
Następnie, gdy wpychasz do SecondVC, zobaczysz, że jest tylko strzałka wstecz
źródło
Jeśli ustawisz tintColor Of NavigationBar, dodaj niestandardowy obraz przycisku Wstecz bez tytułu, aby kolor odcienia odzwierciedlał kolor obrazu. Kliknij ten link do dokumentacji Apple.
https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/UIKitUICatalog/index.html#//apple_ref/doc/uid/TP40012857-UIView-SW7
źródło
Sprawdź tę odpowiedź
Jak zmienić nazwę przycisku wstecz UINavigationController?
ustaw
title
tekst nastring
jedną pustą spację, jak poniżejNie masz wystarczającej reputacji, aby dodawać komentarze :)
źródło
Napisałem rozszerzenie, aby to ułatwić:
źródło
Możesz zmienić tytuł na @ "" bieżącego ViewController na viewWillDisappear, a kiedy ma się ponownie wyświetlać, ponownie ustaw tytuł na to, co było wcześniej.
źródło
W metodzie preparForSegue: pierwszego ViewControllera ustawiłeś tytuł tego widoku na @ "", więc po naciśnięciu następnego widoku wyświetli poprzedni tytuł ViewController, który będzie @ "".
Jedynym problemem jest to, że po naciśnięciu przycisku Wstecz twój poprzedni widok nie będzie miał tytułu, więc możesz dodać go ponownie w viewWillAppear:
Nie podoba mi się to rozwiązanie, ale działa i nie znalazłem innego sposobu.
źródło
Aby dodać do powyższej odpowiedzi Thomasa C. , czasami umieszczenie pojedynczej spacji nie działa i musisz dodawać spacje.
Będziesz wiedział, że się udało, gdy zobaczysz „Element przycisku paska -” pod „Elementem nawigacji”. To jest w Zarysie dokumentu (Edytor-> Pokaż zarys dokumentu). Gdy zobaczysz powyższe zdjęcie, możesz usunąć kilka spacji i sprawdzić, czy nadal działa.
źródło
Podobnie jak Kyle Begeman, dodajesz powyższy kod do kontrolera widoku głównego. Zastosowany zostanie cały kontroler widoku pomocniczego. Dodatkowo, dodając to w metodzie initWithCoder:, możesz zastosować styl dla kontrolerów widoku głównego w podejściach opartych na Xib, Storyboard lub Code.
źródło