2011-12-28 3 views
13

В библиотеке объектов Xcode существуют два параметра, которые можно использовать для создания вида табличного представления - табличного представления и контроллера табличного представления. В чем разница между ними и когда они будут использоваться?iOS - В чем разница между Table View и Table View Controller

ответ

19

TableViewController - это ViewController с встроенным TableView. Это потребует уже объявленных и настроенных методов делегата. Этот VC уже является делегатом TableView и источником данных. Его нельзя изменить. Поверхность - это простота использования, недостаток - очень ограниченная гибкость.

TableView - это просто TableView (подкласс UIView). Его можно добавить в ViewController и изменить размер, использовать вместе с другим объектом, основанным на представлении, и т. Д. Потенциал роста - это гибкость, недостатком является то, что вам нужно самостоятельно настроить методы делегата и источника данных (на мой взгляд, стоит потратить время гибкость).

Еще одно замечание: при использовании новых ячеек Static TableView (часть iOS5) вам необходимо использовать TableViewController.

+0

Хорошая точка в упоминании об отсутствии изменения размера/совместного использования 'UITableView' с другими элементами управления на одном экране при использовании' UITableViewController'. Ну, с другой стороны, всегда можно использовать элементы tableHeaderView и 'tableFooterView' для других элементов управления. – Till

+0

Правда, но когда вы делаете такие вещи, как статический SearchBar (который не прокручивается), VC с TableView работает хорошо. –

4

UITableViewController является подклассом UIViewController. Он уже предполагает, что у вас будет UITableView как ваш rootView, так что у вас уже есть доступ из кода в tableView (self.tableView). Он реализует протокол UITableViewDataSource и UITableViewDelegate. Это также дает вам множество способов переопределить. Это позволяет вам не зависеть от XIB-файла, потому что вы уже знаете, что у вас будет (UITableView как rootView).

UITableView просто UIView, как правило, вы должны соблюдать для протоколов я упомянутые выше в вашем UIViewController для того, чтобы заполнить (источник данных) и работать с ним (делегат), и вы, возможно, придется создать IBOutlet для вашего UITableView.

С одной стороны, у вас есть скорость, но вы не так гибки, как другой путь. С другой - наоборот.

+0

Ваш ответ, как правило, правильный, но немного ориентированный на мой вкус. Чтобы уточнить, IBOutlets, безусловно, необходимы только в том случае, если вы намереваетесь использовать InterfaceBuilder для выкладки своих просмотров. Эта задача, безусловно, может быть выполнена (иногда лучше) с использованием простого кода. – Till

+0

Я предпочитаю использовать 'InterfaceBuilder' всякий раз, когда могу, быстрее, и он сохраняет код чистым. Конечно, вы можете объявить 'UITableView' в своем коде и просто добавить его' UIView', хотя мне это не нравится. – Peres

Смежные вопросы