2011-06-06 14 views
11

Więc stworzyłem UINavigationController ręcznie ustawić go jako mojego UIWindow za rootViewController i chciałbym użyć przycisku Wstecz, aby opuścić UINavigationController i załadować kolejny viewController w jego miejsce. Jednak backItem własność UINavigationBar jest readonly, więc nie wiem jak to ustawić prawidłowo (jest readonly i domyślnie do zera w głównym widoku nawigacji). Jak mogę to osiągnąć (lub podobny efekt, chcę móc skutecznie "wyjść" z tego UINavigationController, naciskając przycisk powrotu w widoku głównym).Making przycisk z powrotem do widoku głównego w UINavigationController

Alternatywnie, czy to ta zła forma? W jaki sposób powinienem uciec z widoku głównego UINavigationController?

EDIT:

Próba Legolas' rozwiązanie z następującego kodu: (niektóre imiona zostały zmienione)

UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:plvc]; // plvc being the first viewcontroller 
MyAppDelegate* appDelegate = [Utility getAppDelegate]; 
appDelegate.window.rootViewController = navController; 

UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)]; 
navController.navigationItem.leftBarButtonItem = backButton; 
[navController.navigationItem setHidesBackButton:YES animated:YES]; 
[navController.view setNeedsDisplay]; 

Ale przycisk nie jest wyświetlany. Co ja robię źle? Pozostałe przyciski wstecz wyświetlają się poprawnie, ale ten nadal nie działa.

+1

LOL. FYI. Skopiowałem twój kod EXACT i działa! Przejdź do metody ViewDidLoad określonego widoku. połóż te trzy rzeczy, które wkleiłem. – Legolas

Odpowiedz

15

Możesz to zrobić w innym podejściu.

Go metody:

- (void)viewDidLoad 

Ukryj przycisk Wstecz z

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

Utwórz nowy UIButton lub UIBarButtonItem, i umieścić go w miejscu przycisku Wstecz.

Następnie można użyć akcję po kliknięciu przycisku

- (IBAction) clickBackButton : (id) sender; //and push view controller to your required view. 

Aktualizacja moją odpowiedź: Użyj tego w metodzie viewDidLoad // działa jak czar //

[self.navigationItem setHidesBackButton:YES animated:YES]; 
UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)]; 

self.navigationItem.leftBarButtonItem = backButton; 
+0

Dobrze, ale nie ukrywasz przycisku Wstecz, ukryj to również dla wszelkich subviews? Chcę go tam użyć i chciałbym tylko wyjść z widoku głównego –

+0

Nie wiem, w jaki sposób utworzyłeś nowe widoki, ponieważ nie opublikowałeś żadnego kodu na temat działania aplikacji. Ale nie sądzę, żeby to było ukryte dla wszystkich subviews. Użyj tego pomysłu i utwórz ten przycisk tylko dla widoku, który chcesz zakończyć. Nie zaszkodzi by spróbować [self.navigationItem setHidesBackButton: YES animated: YES]; w jednym widoku i eksperymentuj :) – Legolas

+0

brb, testowanie :) –

0

spróbować dis: -

UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(initializeStuff)]; 
[self.navigationItem setleftBarButtonItem:leftBarButton]; 
[leftBarButton release]; 
3

Istnieje kilka podejść, które mogę wymyślić.

  1. Użyj swojej własnej ikony "Wstecz" własnego projektu lub domyślnego systemu. Użyj leftBarButtonItem.
  2. Utwórz obraz domyślnej ikony. Ponownie użyj leftBarButtonItem.
  3. Wykonaj fałszywy widok root, który można wepchnąć do stosu UINavigationController. Jedynym celem tego widoku głównego będzie uruchomienie widoku dodatkowego lub śmierć po powrocie użytkownika. W ten sposób nigdy nie zobaczysz UINavigationController bez przycisku wstecz. Testowałem to (ale nie profilowałem); wpływ na wydajność wydaje się znikomy.

Ponadto, sprawdź < https://discussions.apple.com/message/8298537#8298537> od 2008 roku to samo pytanie.

Problem polega na tym, w jaki sposób użytkownik może wydostać się z kontrolera UINavigationController iz powrotem do aplikacji? Główny pasek nawigacyjny nie ma przycisku Wstecz ani żadnego haka do opuszczenia.

Do którego ktoś odpowiedział:

Aby zrobić to, co chcesz zrobić, sztuką jest umieścić "super-root" kontroler wewnątrz kontrolera nawigacji, ale to ustawić navigationBarHidden sterownika NAV właściwość TAK w viewWillAppear i NO w viewWillDisappear. (Aby uzyskać punkty bonusowe, należy je ożywić w razie potrzeby.)

Powiązane problemy