2014-11-06 10 views
13

w moim kontrolerze nawigacyjnym Potrzebuję tymczasowo wyłączyć przycisk Wstecz. Wiem, że to może być ukryte stosując następującą lub coś podobnego:iOS 8 UINavigationController wyłącz Back Button

[self.navigationController.navigationItem setHidesBackButton:YES animated:YES];

Ale to nie jest to, czego mi potrzeba, a nie chcę, przycisk Wstecz, aby być wyszarzone i nie reagują na zdarzenia dotykowe użytkownika. Czy jest to sposób na osiągnięcie tego celu bez zastępowania domyślnego przycisku wstecz?

Z góry dziękuję!

Odpowiedz

4

Wierzę, że następujące powinny pomóc:

self.navigationController.navigationItem.backBarButtonItem.enabled = NO; 

UPDATE

Sorry chłopaki, moja wiara nie ziściło.

Wygląda na to, że właściwość backBarButtonItem została zaprojektowana wyłącznie do ustawiania niestandardowego tytułu lub obrazu przycisku Wstecz.

Z dokumentacji:

Jeśli chcesz określić własny obraz lub tytuł dla pleców przycisku, można przypisać element niestandardowy przycisk bar (z tytułu niestandardowego lub obrazu) do tej nieruchomości zamiast . Podczas konfigurowania elementu przycisku paska element, nie przypisuj do niego widoku niestandardowego; element nawigacyjny ignoruje niestandardowe widoki w przycisku Wstecz paska mimo to.

Domyślna wartość tej właściwości to zero.

Niestety nie znaleźliśmy żadnego sposobu wyłączanie przycisku z powrotem oszczędność natywną wygląd i zachowanie, ponieważ za każdym razem, gdy próbuję ustawić niestandardowy UIBarButtonItem do navigationItem.backBarButtonItem nieruchomości - jest ona aktualizowana z odpowiednim natywnym Wstecz stylu zawsze ma enabled == YES.

Sądzę, że robi to Apple z jakiegoś powodu, ponieważ zasadniczo nie powinniśmy zmuszać użytkownika do pozostawania na ekranie szczegółów i uniemożliwić mu powrót. Ponadto, w iOS7 i późniejszym użytkowniku zawsze można użyć gestu przesunięcia z lewej strony (jeśli go nie wyłącza), aby powrócić.

Jedyną brzydką rzeczą, którą mogę polecić, jest stworzenie niestandardowego UIBarButtonItem i ustawienie go na leftBarButtonItem z tytułem, celem i selektorem "Powrót", który spowoduje wyświetlenie kontrolki viewController. Domyślnie zastąpi natywny przycisk powrotu. Następnie możesz wyłączyć to tak jak zwykle, używając navigationItem.leftBarButtonItem.enabled = NO.

Niestety to nie będzie wyglądać i działać (w przypadku tytułu aktualizacji w zależności od dostępnego miejsca) jako ojczystego tylnym przycisku :(

+1

To nie działa. Próbowałem wywoływać twój kod w viewDidLoad i viewDidAppear iw obu przypadkach nie wydaje się, żeby to miało jakikolwiek wpływ. –

+1

@ user3636891 Zgadzam się, że ten kod nie działa również dla mnie –

+0

Nie działa również dla mnie. – Jeswin

5

wiem, że to jest dość stary, ale miałem ten problem też.

W moim przypadku w jednym scenariuszu musiałem wyłączyć przycisk Wstecz, aw innym musiałem wyłączyć wszystkie przyciski nawigacyjne.moje rozwiązanie było wyłączyć pasek nawigacyjny w sumie w obu scenariuszach:

self.navigationController.view.userInteractionEnabled = NO; 

To nie pokaże przycisków jako wyłączone, ale uniemożliwi akcenty.

nadzieję, że pomoże

+7

Myślę, że to faktycznie wyłącza interakcję dla całego widoku kontrolera widoku z góry ...! – fatuhoku

+0

+1 Mój przypadek użycia wyłączał przycisk Wstecz, wyświetlając pasek postępu i czekając na odpowiedź sieciową, więc ta odpowiedź była doskonała. –

15

Aby wyłączyć przycisk wstecz, te komendy stałaby się robić to, co chcesz to zrobić:

Włącz:

self.navigationController.navigationBar.userInteractionEnabled = YES; 
self.navigationController.navigationBar.tintColor = [UIColor blueColor]; 

niepełnosprawnych:

self.navigationController.navigationBar.userInteractionEnabled = NO; 
self.navigationController.navigationBar.tintColor = [UIColor lightGrayColor]; 

Aktualizacja:

Począwszy od wersji iOS 7, istnieje również możliwość przesunięcia palcem na urządzeniu UINavigationBar.

// You wrap it an 'if' statement so it doesn't crash 
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { 
// disable the interactivePopGestureRecognizer 
    self.navigationController.interactivePopGestureRecognizer.enabled = NO; 
} 
+0

Wreszcie coś, co działa! – BridgeTheGap

+0

Istnieje również przesunięcie, które można "wpadać". Zaktualizowałem, jak to wyłączyć. – Adrian

+0

Powoduje wyłączenie wszystkich przycisków, a nie tylko przycisku Wstecz. –

6

To ukrywa przycisk Wstecz, sot, który staje się nieosiągalny dla użytkownika. Ale nie wyłącza:

[self.navigationItem setHidesBackButton:YES]; 
+0

Proszę [edytuj], aby objaśnić swój kod. –

+0

bardzo przydatne informacje! – iWheelBuy

+0

Prostszy niż @adrian –