2012-05-30 14 views
14

Utworzyłem nowy kontroler nawigacyjny w moim scenorysie (nie programowo!) I ustawiłem go jako "Kontroler widoku głównego" na zwykły kontroler UIViewController i dodałem przycisk w nim, który mówi: do następnego kontrolera widoku (ten drugi kontroler widoku to kontroler widoku, który chcę, aby miał przycisk Wstecz, aby połączyć z początkowym kontrolerem widoku). Teraz, gdy próbuję połączyć przycisk z następnym kontrolerem widoku, "Nie można popychać kontrolera nawigacyjnego".Przesyłanie kontrolera nawigacyjnego nie jest obsługiwane - wykonywanie sekwencji

pomóż mi proszę, a dzięki

EDIT: przypadkowo podklasy UINavigationController i nie UIViewController w mojej klasie. Dziękuję i tak.

+0

proszę sprawdzić następujące https://github.com/cruffenach/Mobile-Tuts-Plus-UIStoryboard –

+0

w skrócie, proszę? –

+0

Więc zmieniliście 'RootiViewController' na 'UIViewController'? – woz

Odpowiedz

10

Próbowałem tego i nie ma problemów, jej wszystko zrobić w IB bez dodatkowego kodu wymaganego ...

  1. rozpocząć nowy projekt, „Single View Application” za pomocą deski story
  2. Wybierz scenorys i usuń uzyskane przez siebie widoki.
  3. Drag na nowy kontroler nawigacyjny (to przyniesie widok tabeli z nim)
  4. Usuń tabelę i kontroler widoku tabeli, więc są tylko w lewo z kontrolerem nawigacji
  5. Drag na normalnym kontrolerze widoku
  6. prawym przyciskiem myszy i przeciągnij od kontrolera nawigacji do nowego widoku i wybierz „Powiązania - root View Controller”
  7. przeciąganie „Bar Przycisk pozycji” na pasku nawigacyjnym, które powinny być widoczne na górze ViewController można zmień nazwę tego przekazania, jeśli chcesz.
  8. Teraz przeciągnij na inny kontroler widoku, który jest tym, który przesyła przycisk "Przekaż", aby go wyświetlić.
  9. prawym przyciskiem myszy i przeciągnij z przycisku paska do 2 View Controller, a następnie wybierz „push”

uruchomić projekt, a dostaniesz jednym widoku z pasku nawigacyjnym i swojej przycisku kliknięciu przycisku push drugi widok i daje przycisk Wstecz, aby powrócić do pierwszego kontrolera widoku. Spróbuję opublikować zdjęcie mojego storyboardu, jeśli to pomoże.

PushViewControllers

plazmowy

+0

Dzięki! kolejna (malutka) kolejka - czy mogę zrobić to "pchając" programowo? Mam na myśli, chcę zrobić instrukcję if - na przykład, tylko jeśli aplikacja została autoryzowana do centrum gier. Jak mogę to zrobić? –

+0

BTW - twoja droga rzuca mi ten błąd: TwentyOneQuestions [37746: 1bb03] *** Kończenie aplikacji z powodu nieprzechwyconego wyjątku "NSInvalidArgumentException", powód: "Przesunięcie kontrolera nawigacyjnego nie jest obsługiwane" *** Pierwszy stos wywoławczy: (0x132f022 0x26e6cd6 0x38cf1b 0xb36452d 0x38ca24 0x6e8de6 0x6dd4d0 0x1330e99 0x2b514e 0x4f3a0e 0x1330e99 0x2b514e 0x2b50e6 0x35bade 0x35bfa7 0x35b266 0x2da3c0 0x2da5e6 0x2c0dc4 0x2b4634 0x18e9ef5 0x1303195 0x1267ff2 0x12668da 0x1265d84 0x1265c9b 0x18e87d8 0x18e888a 0x2b2626 0x296d 0x28d5) terminate nazywane rzuca wyjątek (lldb) –

+0

mogę myśleć tylko ty może zrobił coś źle? Czy wybrałeś zwykły "kontroler widoku" dla dwóch ostatnich widoków, a nie kontroler nawigacyjny. do yhr point o prawe kliknięcie i przeciąganie widoków powinno być zwykłymi białymi kwadratami bez niczego w nich poza paskiem stanu. Niebieski pasek nawigacyjny zostanie umieszczony automatycznie po podłączeniu skrzynek. – Plasma

0

Aby przełączać widoki Programowo trzeba by wybrać segue i nadać mu identyfikator jak "PushView", a następnie wywołać ją tak ....

[self performSegueWithIdentifier:@"PushView" sender:self]; 

To programowo zrobi to samo, co kliknięcie przycisku przewijania do przodu. Stworzyłem dla ciebie przykładowy projekt z omówionym wyżej kodem. Ma - (IBAction) z kodem w można użyć do programowej zmiany widoku.

PushView.zip

1

miałem ten sam problem. Chciałem mieć kontroler nawigacyjny na każdym scenorysie, tak aby każdy mógł działać niezależnie, być indywidualnie debugowany i aby wygląd był zgodny z paskiem nawigacji.

Korzystając z innych podejść, stwierdziłem, że kontroler UINavigationController zostanie zachowany z oryginalnego scenorysu - którego nie chcę - lub dostanę błędy.

Używanie AppDelegate w kontrolerze widoku, aby ustawić rootViewController pracował dla mnie (pożyczki segue konwencji nazewnictwa z Segue to another storyboard?):

- (void)showStartupNavigationController { 
NSLog(@"-- Loading storyboard --"); 

//Get the storyboard from the main bundle. 
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Startup" bundle:nil]; 
//The navigation controller, not the view controller, is marked as the initial scene. 
UINavigationController *theInitialViewController = [storyBoard instantiateInitialViewController]; 

NSLog(@"-- Loading storyboard -- Nav controller: %@", theInitialViewController); 

//Remove the current navigation controller. 
[self.navigationController.view removeFromSuperview]; 
UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window]; 
window.rootViewController = theInitialViewController; 
+0

Mogę ci w tym pomóc. Rozważmy http://stackoverflow.com/a/23403979/294884 i http://stackoverflow.com/a/23060746/294884 (zawsze trudno jest wiedzieć "tylko jaki jest problem/rozwiązanie" z opcją "storyboard-viewcontrollers- pojemniki! Jeśli nie ma to znaczenia dla twoich potrzeb, nie szkodzi.) – Fattie

0

Chciałem to zrobić, przedstawi ekran (który miał wbudowaną nawigację kontroler), gdy użytkownik naciśnie przycisk.

Przy pierwszej próbie podłączono przełącznik z przycisku na pierwszym ekranie do kontrolera nawigacyjnego, a aplikacja uległa awarii z tym błędem "Nie można popychać kontrolera nawigacyjnego".

To rozwiązanie znalazłem:

Wybierz segue z przycisku na pierwszym ekranie do kontrolera nawigacji. Jeśli miał identyfikator, skopiuj jego nazwę. Następnie usuń ten segue.

Następnie utwórz nowy segue przez CTRL-kliknięcie przycisku w pierwszym kontrolerze widoku i przeciągając do kontrolera VIEW chcesz zaprezentować (nie do kontrolera nawigacji, która jest skierowana na niego) i wybierz wcisnąć małe okienko wyskakujące.

Następnie kliknij ikonę pośrodku segue i wklej nazwę skopiowaną w pierwszym kroku jako jej identyfikator.

IB wyświetli ostrzeżenie "Scena jest nieosiągalna z powodu braku punktów wejścia i nie ma identyfikatora dostępu do środowiska wykonawczego za pośrednictwem -instantiateViewControllerWithIdentifier :." Nie martw się, działa idealnie.

Jeśli chcesz dostosować ciąg znaków, który jest wyświetlany jako przycisk Wstecz, aby powrócić, można dodać ten wiersz w metodzie viewDidLoad kontrolera pogląd, że JEST pokazał PO naciśnięciu przycisku, że jest dzieckiem zobacz kontroler.
(zastąpić „Ustawienia” z nazwą trzeba)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.navigationController.navigationBar.topItem.title = @"Settings"; 
    ... 

} 
Powiązane problemy