UITableView против UITableViewController - PullRequest
13 голосов
/ 08 марта 2009

Может кто-нибудь объяснить мне преимущества UITableViewController по сравнению с UITableView? Обычно я использую контроллер, но базовое табличное представление кажется более гибким.

Ответы [ 6 ]

13 голосов
/ 17 октября 2012

Я всегда использую UITableView. Я никогда не использую UITableViewController.

Использование UITableViewController сбивает с толку. Каждый контроллер должен делать один экран, кроме контейнерных контроллеров.

Ну, UITableViewController - это контроллер, и в большинстве случаев tableView - это не единственное, что там есть.

Если вы посмотрите на документацию: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html

UITableViewController предоставляет очень мало нового интерфейса по сравнению с UITableView. Ничего из этого не является существенным.

– initWithStyle: 

(да? Я запускаю tableView в перо, и я все равно много настраиваю)

Получение вида таблицы

  tableView  property 

(исходный вид таблицы)

Настройка поведения таблицы

  clearsSelectionOnViewWillAppear  property 

(хорошо, просто поместите код в ViewWillAppear)

Обновление представления таблицы

  refreshControl  property 

[перезагрузка tableView] ?

Итак, вы видите,

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

5 голосов
/ 08 марта 2009

Не думаю, что вы понимаете свой вопрос.

UITableViewController - это контроллер .

UITableView - это представление .

Один не лучше , чем другой, это совершенно разные объекты, используемые для совершенно разных вещей.

Я бы потратил некоторое время на изучение шаблона Model-View-Controller, столь распространенного среди какао и iPhone SDK.

Шаблон проектирования контроллера модели-вида

2 голосов
/ 22 апреля 2009

Идея состоит в том, что ViewControllers содержат дерево подпредставлений (и подпредставителей) и управляют отправкой событий в / из его подпредставлений. Например, у вас может быть представление, которое содержит изображение, и это представление находится в контроллере представления, который обрабатывает изменения ориентации и предупреждения памяти и т. Д.

1 голос
/ 17 марта 2013

Это одна вещь, которая меня очень смущает в Какао: реализация Apple MVC (или, по крайней мере, терминология, которую они используют) сомнительна. В Какао большинство представлений фактически действуют в некоторой степени как контроллеры, поскольку шаблон MVC определяет их (просто посмотрите на UITableView - большинство его методов на самом деле являются методами контроллера). Поэтому у вас есть дополнительная концепция Apple о контроллере представления поверх того, что уже в некоторой степени является контроллером. Тот факт, что вам даже не нужно использовать UITableViewController вообще (даже с привязкой данных), в основном доказывает, что представление действует как свой собственный контроллер. В MVC нельзя иметь представление, привязанное к модели без контроллера (это целая точка контроллера в MVC).

Разработчикам Apple кажется, что «контроллер представления» (например, UITableViewController) действительно представляет собой класс помощника / менеджера несколько более высокого уровня, который управляет более низкоуровневым классом UITableView и обеспечивает несколько key дополнительные возможности , которые больше связаны с тем, как табличное представление взаимодействует с общим пользовательским интерфейсом приложения.

Кроме того, похоже, что Apple намеревается, чтобы контроллер представления фактически был больше контроллера экрана, рекомендуя только один контроллер представления на экран (возможно, это означает, что вы не можете вкладывать контроллеры представления). Я утверждаю, что называть эту концепцию контроллером представления неверно.

Пожалуйста, не стесняйтесь поправлять меня в этом, я все еще очень плохо знаком с Obj-C / Cocoa.

0 голосов
/ 16 марта 2016

UITableView - это представление, а UITableViewController - это контроллер, для которого UITableView является корневым представлением.

Итак, используя UITableViewController:

  1. У вас есть одно корневое представление, которое UITableView само по себе. Таким образом, он занимает меньше памяти, чем UITableView с UIView в качестве родительского представления в своем контроллере.

  2. Он предоставляет вам готовый шаблон, если вам нужен контроллер, и UITableView в качестве основного экрана.

  3. Статические представления таблиц действительны только при внедрении в UITableViewController экземплярах.

0 голосов
/ 22 апреля 2009

Приведенная выше ссылка возвращает «Страница не найдена». По какой-то причине даже исправленная ссылка возвращает гиперссылку «Страница не найдена» (возможно, Apple не разрешает ссылаться на сайт своего разработчика).

Чтобы найти соответствующую информацию, перейдите в раздел «Подключение разработчика Apple» (http://developer.apple.com/index.html)) и выполните поиск по «шаблону проектирования модели какао-контроллера».

В таблице результатов выберите «Руководство по основам какао: шаблоны проектирования какао». На этой странице прокручивайте Оглавление с левой стороны, пока не увидите элемент «Шаблон проектирования Модель-Вид-Контроллер». Выберите этот элемент, чтобы узнать больше информации об этом конкретном шаблоне дизайна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...