2010-09-21 20 views
7

Występuje problem z aplikacją na iPada, w której chciałbym mieć UINavigationControllers w obu widokach w ramach UISplitView. Przejrzałem tutaj inne podobne pytania, ale większość łączy się z tutorialem online, który nie rozwiązuje całkowicie problemu. Oto 2-minutowy instruktaż umożliwiający odtworzenie problemu, który mam:Czy można użyć elementu UINavigationController jako widoku szczegółowego kontrolera UISplitViewController?

  1. Utwórz nowy projekt w XCode, zaczynając od szablonu aplikacji opartej na podziale widoku.
  2. Dodaj następujące oświadczenie NSLog jako pierwsza linia w ciągu DetailViewController za willHideViewController metody:

    NSLog (@ "na pasku narzędzi:% @", pasek narzędzi);

Jeśli uruchomisz aplikację teraz, dziennik pokaże, że pasek narzędzi DetailViewController jest żywy i dobrze. Teraz ...

  1. Otwórz MainWindow.xib i rozwiń SplitViewController.
  2. Przeciągnij kontroler nawigacyjny z biblioteki nad elementem DetailViewController.
  3. Rozwiń nowy kontroler nawigacyjny i zmień klasę UIViewController wewnątrz na DetailViewController.
  4. Ctrl przeciągnij z SplitViewController do DetailViewController i przypisz go jako delegata.
  5. Zapisz plik MainWindow.xib i uruchom ponownie aplikację.

W tym miejscu widok szczegółowy ma pasek nawigacji i pusty pasek narzędzi. Jeśli przeglądasz dzienniki, powinieneś zauważyć, że pasek narzędzi ma wartość NULL. Dlaczego to? Czy brakuje mi jakiegoś połączenia w programie Interface Builder? Czy pasek nawigacyjny jest problemem z jakiegoś powodu?

W przeciwieństwie do samouczka na stronie http://www.cimgf.com/2010/05/24/fixing-the-uisplitviewcontroller-template/, chciałbym zachować zarówno pasek nawigacyjny, jak i pasek narzędzi (najlepiej z paskiem narzędzi na górze, gdy portret jest niewidoczny i nie jest widoczny w krajobrazie), więc nadal mam funkcjonalny "Wróć ", gdy iPad znajduje się w orientacji pionowej.

Czy ktoś ma jakieś sugestie dotyczące rozwiązania tego problemu? Przykładowy projekt z takim ustawieniem byłby idealny.

+0

@b Sweigard: Cześć, czy kiedykolwiek rozwiązać swój problem? Próbuję zrobić prawie to samo, co próbowałeś. – matm

Odpowiedz

0

Znalazłem wbudowany kontroler UISplitViewController, który zachowuje się źle podczas próby połączenia go z większością innych wbudowanych podklas kontrolerów widoku. Matt Gemmell's MGSplitViewController jest dużo bardziej elastyczny i działa całkiem nieźle, pomimo dziwnych trzasków (chociaż są one co najmniej poprawne, ponieważ dostarczono kod źródłowy).

1

Z pewnością można użyć kontrolera nawigacyjnego w widoku szczegółowym kontrolera widoku podzielonego. W rzeczywistości aplikacja Ustawienia na iPad używa tego podejścia. Prawdopodobnie najlepszym sposobem uzyskania tej konfiguracji jest utworzenie nowego projektu w Xcode 4.x i wybranie szablonu "Master-Detail Application". Wygeneruje kontroler podzielonego widoku z 2 kontrolerami nawigacyjnymi, jeden dla widoku lewego i jeden dla widoku prawego.

Na pytanie paska narzędzi, aby wszystko było proste, umieściłbym pasek narzędzi na dole. Nadal możesz umieszczać elementy paska przycisków na górnym pasku nawigacyjnym, ale możesz je umieszczać tylko w lewo, w środku lub w prawo. Jeśli potrzebujesz dużo elementów na górnym pasku, jednym ze sposobów jest dodanie paska narzędzi do widoku szczegółów i ukrycie paska nawigacji w zdarzeniu viewWillAppear klasy widoku szczegółów.

Oto przykład, w jaki sposób ukryć pasek nawigacyjny i wyświetlić pasek narzędzi:

- (void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.navigationController.toolbarHidden = NO; 
    self.navigationController.navigationBarHidden = YES; 
} 
Powiązane problemy