2012-07-03 11 views
9

Buduję aplikację na iPhone'a za pomocą scenorysów i mam problem z kontrolerem paska kart. W jednym z widoków połączonych za pomocą kontrolera paska kart (widok1) znajduje się przycisk prowadzący do innego widoku (widok2). W widoku 2 znajduje się przycisk, który prowadzi z powrotem do widoku 1. Bardzo prosto. Ale kiedy przechodzę z widoku 1 do widoku2, pasek kart znika, a jeszcze gorzej, gdy wracam do widoku 1, pasek kart nadal nie działa ... Jak mogę to naprawić? (Jeszcze nie umieściłem DOWODNEGO kodu w aplikacji, jest tylko storyboard i jabłko dostarczone klasy AppDelegate (a także główny plik, który przypuszczam, ale nie zamierzam tego dotykać).Kontrolka paska kart zniknie podczas przechodzenia do innego widoku (iOS SDK, Korzystanie z scenorysów)

Każda odpowiedź jest wysoce mile widziana!

+0

Jak się prezentuje drugi widok? – Dustin

+0

, gdy użytkownik kliknie przycisk, który po prostu przenosi je do View2 – byteSlayer

+0

Czy wykonałeś jakieś ustawienia? A może po prostu użyłeś funkcji paska kart. Z twojego problemu wynika, że ​​używasz segue – Dustin

Odpowiedz

30

Jeśli nie modalne segue z myślą, że jest to widok pasek kart, to pozbyć pasku kart do widoku modalnej prezentujemy.

po drugie, kiedy segue tworzysz nowa instancja kontrolera widoku, więc domyślam się, że przenosisz się z widoku 1 do widoku2 i utraty paska kart, a następnie przenosisz się z powrotem do widoku 1. W tym momencie utworzyłeś widok1, widok2 i drugą kopię widoku1, nie hav e pasek zakładek.

Proponuję jedną z dwóch rzeczy.

1.) Jeśli chcesz zachować zakładki na dole, kiedy przenosisz się z widoku 1 do widoku 2, a następnie kliknij widok 1, w górnej części ekranu wybierz Edytor/Osadź wbudowany/Kontroler nawigacyjny. Spowoduje to umieszczenie twojego widoku1 w kontrolerze nawigacyjnym. Następnie, jeśli zmienisz swoją segue z Modal na Push, utrzymasz pasek kart na dole. Pasek nawigacyjny u góry ułatwia również powrót z widoku 2 do widoku 1 w prawidłowy sposób (poprzez wyświetlenie widoku) zamiast tworzenia nowego przejścia. Jeśli nie podoba ci się pasek nawigacji, możesz zmienić właściwość "Górny pasek" na "Brak" w inspektorze. Będziesz wtedy musiał stworzyć inny sposób w view2, aby powrócić do view1. (ZA POMOCĄ KONTROLERA, NIE SEGAJĄCEGO)

2) Jeśli nie chcesz konfigurować kontrolera nawigacyjnego, będziesz miał nieco trudniejsze utrzymywanie paska kart na dole kontrolki view2. W rzeczywistości, nie jestem pewien, czy możesz to zrobić w ogóle z modalnym segue, prawdopodobnie musiałbyś napisać jakiś rodzaj niestandardowej segue. Tak czy inaczej, jeśli chcesz przejść z powrotem do widoku 1 i dostać się do właściwego kontrolera (nie nowej wersji bez kart), musisz załączyć akcję do dowolnego przycisku, którego używasz do segregowania i używania poniższego kodu (dołączyłem też kod do kontrolera nawigacji segues Push, w przypadku tworzenia kontrolera nawigacyjnego i pozbyć pasku nawigacyjnym)

dla Modal segue.

[self dismissModalViewControllerAnimated:YES]; 

dla push segue:

[self.navigationController popViewControllerAnimated:YES]; 

Najlepiej jest skorzystać z nawigacji metoda kontrolera, ponieważ masz pewność, że zachowasz karty. Możesz następnie użyć paska nawigacji, aby powrócić (w łatwy sposób, bez kodu) lub możesz się go pozbyć i użyć przycisku i kodu powyżej.

Powodzenia!

+0

Przesłuchuje szczegółową odpowiedź. To bardzo pomocne! – byteSlayer

+0

Użyłem rozwiązania 1. Ale kiedy to zrobiłem (wybrany widok # 1), miałem dwóch kontrolerów nawigacyjnych, ponieważ miałem już jeden w moim scenorysie. Usunąłem kontroler nawigacji rodzica, który znajdował się za moim kontrolerem na pasku kart. Zamiast tego użyłem takiego kontrolera nawigacyjnego. kontroler paska kart -> kontroler paska nawigacyjnego -> sterownik tabel -> szczegółowy kontroler tabel. Tak więc dla każdej karty mam własny niezależny kontroler nawigacji. Może istnieć wspólny sposób korzystania z jednego kontrolera nawigacji, ale wydaje się, że działa całkiem dobrze. –

+0

Tak, dokładnie tak zrobiłem w przypadku kilku projektów. To właśnie starałem się przedstawić powyżej. –

2

Miałem ten sam problem, wiem, że to stare pytanie, ale [self dismissModalViewControllerAnimated:YES]; jest przestarzałe w systemie iOS 6.

Co użyłem to:

[self dismissViewControllerAnimated:YES completion:nil];

Powiązane problemy