2012-06-29 11 views
6

jest to sytuacja:UITableViewController wewnątrz UIScrollView z Horizontal Paging

Potrzebuję przewijania w poziomie i widoków tabel na każdej stronie. Jest to coś w rodzaju aplikacji wiadomości, powinno wyświetlać wiadomości z różnych kategorii, kiedy przewijane są w jednym kierunku poziomym, awewnątrz jednej kategorii powinna wyświetlać około 30 wiadomości, oczywiście przewijanych w pionie.

udało się zrobić to, co trzeba, ale ...

Mam następujący scenariusz:

UINavigationController 
|__ UIViewController, which contains ScrollView and PageControl 
    |__ UITableViewController, which holds data in rows, and is displayed inside parent, which is actually ScollView 

wiem, że nie jest to idealne rozwiązanie, ale przynajmniej działa. Jako bazę wykorzystałem kod i samouczek Apple'a dla PageScroll znalezionego na tym link. Zamiast prostego viewController, aby dodać do ScrollView, użyłem TableViewController, więc zasadniczo dodaję tableController.tableView do ScrollView.

Wiem również, że dodawanie tableViews wewnątrz scrollview to rodzaj dodawania samochodu do ciężarówki i prowadzenia tego samochodu, ale nie mogłem znaleźć rozsądniejszego sposobu robienia tego samego.

Potrzebuję twoich przemyśleń o tym, jak można to osiągnąć, stosując inne podejście. Używam do tego tworzenia storyboardów i iOS 5, a wszystko wydaje się (i wygląda) niechlujnie.

Z góry dziękuję bardzo.

+0

Mam dokładnie ten sam problem tutaj. Jak rozwiązałeś ten problem? Nadal dodać UITableViewControllers wewnątrz UIScrollView? Dzięki! – nonamelive

Odpowiedz

5

Zrobiłem coś podobnego kilka miesięcy temu, i to było tak:

  • UINavigationController
    • UIViewController z UIScrollView
      • UIViewController z UITableView wewnątrz (to wykorzystać, gdyż po prostu nienawidzę UITablewViewController)

I po Apple's documentation about creating custom containers. Jest świetny film na ten temat w sekcji wideo WWDC 2011, jeśli się nie mylę. Mogę z dumą powiedzieć, że kod jest naprawdę czysty i łatwy do zrozumienia.


Answer 1,0

Jedną rzeczą jest, nie udało się uzyskać właściwą obsługę orientacji tableview bez włamania, lub nie używać?

Nie, w tym przypadku nie, ale jestem pewien, że byłbym w stanie to zrobić bez problemu. Widzisz, większość problemów pojawia się, gdy po prostu [self.view addSubView:newViewController.view];. Po prostu dodajesz UIView, cała logika obrotu jest obsługiwana przez newViewController, a nie w kontrolerze, gdzie będzie UIView.

Po drugie, jeśli spróbuję zaimplementować, powiedzmy, GridView lub coś podobnego, na iPada, obsługa orientacji i animacja stają się bardzo brzydkie.

I wdrożone to w innym projekcie i było dość łatwe do wdrożenia po zrozumieniu tego, co się dzieje:

  1. użyłem UIViewController z UITableView więc mogę uzyskać wszystkie gadżety z dequeueReusableCellWithIdentifier:, tworzenie tytułów sekcji, nagłówków i stopek tabel itp. Po prostu stwierdzam, że bez względu na to, co zrobię z UIScrollView, zawsze będę bardziej zoptymalizowany. Jako UITableViewCell's użyłem tylko uchwytu z 3 kwadratami, z których każdy jest obrazem. (moja aplikacja była wizytówką zdjęć)
+0

Cóż, to wygląda tak jak moje, z wyjątkiem rzeczy, której nienawidzisz. Rzecz w tym, czy udało ci się uzyskać właściwą orientację stołu tableView, bez żadnego hackowania, czy nie używasz go? Inną rzeczą jest to, że jeśli spróbuję zaimplementować, powiedzmy, GridView lub coś podobnego, na iPada, obsługa orientacji i animacje stają się bardzo brzydkie. @Jacky Boy, dzięki za odpowiedź, oczywiście. – Dimmy3

+0

Sprawdź moją edycję 1.0 – Peres

+0

P1: Zobaczmy, czy zrozumiałem to poprawnie: Czy [self.view addSubView: newViewController.view] (używam [scrollView addSubview: newController.tableView]) to właściwy sposób, albo powinienem załadować nową stronę (kontroler) inaczej? Kiedy robię tak, jak zrobiłem, gdy orientacja zostanie zmieniona, szerokość komórki pozostaje taka sama jak w orientacji pionowej, a część następnej strony jest wyświetlana po tym. – Dimmy3