2011-12-28 7 views

Odpowiedz

19

TableViewController jest ViewController z wbudowanym TableView. Będzie to zawierało wymagane metody delegatów już zadeklarowane i skonfigurowane. Ten VC jest już delegatem TableView i źródłem danych. Nie można zmienić rozmiaru. Upside to łatwość użycia, wadą jest bardzo ograniczona elastyczność.

TableView jest po prostu TableView (podklasa UIView). Może być dodany do kontrolera ViewController i skalowany, używany razem z innym obiektem opartym na widoku itp. Plusem jest elastyczność, wadą jest to, że musisz sam skonfigurować metodę przekazywania i źródła danych (moim zdaniem, warto poświęcić czas na uzyskanie elastyczność).

Jeszcze jedna uwaga jest taka, że ​​podczas korzystania z nowych komórek Static TableView (część iOS5), należy użyć TableViewController.

+0

Dobrze wspomnieć o braku zmiany rozmiaru/udostępniania 'UITableView' z innymi kontrolkami na tym samym ekranie, gdy używany jest' UITableViewController'. Z drugiej strony, zawsze można użyć części 'tableHeaderView' i' tableFooterView' dla innych kontrolek. – Till

+0

To prawda, ale podczas robienia rzeczy takich jak posiadanie statycznego paska wyszukiwania (który nie przewija), VC z TableView działa dobrze. –

4

UITableViewController jest podklasą UIViewController. Zakłada się, że jako rootView masz UITableView, więc już masz dostęp z kodu do tableView (self.tableView). Implementuje protokół UITableViewDataSource i UITableViewDelegate. Daje również wiele metod, które można przesłonić. Pozwala nie zależeć od pliku XIB, ponieważ już wiesz, co będziesz mieć (UITableView jako rootView).

UITableView tylko UIView, zwykle trzeba będzie zgodne z protokołami Mam przywołanych powyżej w UIViewController w celu wypełnienia (źródło danych) i pracować z nim (delegata) i prawdopodobnie trzeba stworzyć IBOutlet dla twojego UITableView.

Z jednej strony masz szybkość, ale nie jesteś tak elastyczny jak druga. Z drugiej strony masz odwrotność.

+0

Twoja odpowiedź jest ogólnie poprawna, ale trochę biseksualna dla mojego gustu. Dla wyjaśnienia, IBOutlets są na pewno potrzebne tylko w przypadku, gdy zamierzasz używać InterfaceBuilder do prezentowania swoich poglądów. Zadanie to może z pewnością równie dobrze (czasem lepiej) zostać zrealizowane przy użyciu zwykłego kodu. – Till

+0

Ja wolę używać 'InterfaceBuilder' kiedy tylko mogę, jego szybsze i utrzymuje kod w czystości. Oczywiście możesz zadeklarować 'UITableView' w swoim kodzie i po prostu dodać go do' UIView', chociaż mi się to nie podoba. – Peres