Существуют ли какие-либо преимущества в использовании UITableViewController над UIViewController, который реализует методы делегирования табличных представлений и источников данных?

В Xcode, когда я создаю новый контроллер представления, чтобы содержать табличное представление, у меня есть две опции

  • Создайте новый UITableViewController
  • Создайте новый UIViewController, который реализует протоколы UITableViewDelegate и UITableViewDataSource

Предполагая, что я правильно реализую все необходимые и необязательные методы для протоколов, есть ли какие-либо преимущества (помимо необходимости писать заглушки метода) с помощью UITableViewController? означает, что что-либо (управление памятью, кэширование и т.д.) реализовано за кулисами класса UITableViewController, что делает вариант 1 лучшим выбором, чем вариант 2?

Ответ 1

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

Есть только две возможные причины, по которым вам следует использовать UIViewController over UITableViewController, когда вам нужен контроллер вида с табличным представлением:

  • Вам нужно, чтобы представление таблицы было меньше, чем вид контроллера представления.
  • Вам нужно добавить дополнительные представления к контроллеру представления, которые не прокручиваются в виде таблицы (хотя есть способы решить эту проблему с помощью UITableViewController).

Вот все, что UITableViewController делает для вас, что вам нужно будет реплицировать:

  • Определяет и настраивает UITableView.
  • Устанавливает себя в качестве представления данных dataSource и делегата.
  • Переопределяет метод setEditing:animated:, чтобы также установить свойство editing в виде таблицы.
  • Отменяет выделение последней выбранной строки в методе viewWillAppear: в зависимости от свойства clearsSelectionOnViewWillAppear.
  • Мигает полосы прокрутки таблицы в методе viewDidAppear:.
  • Подключает контроль обновления (начиная с iOS 6).
  • Перезагружает представление таблицы при первом появлении.
  • Регулирует представление таблицы contentInset (начиная с iOS 7).
  • Прокручивает представление таблицы по мере необходимости, когда появляется клавиатура.

Ответ 2

Преимущество клавиатуры с 0 строками кода

UITableViewController обеспечивает автоматическую прокрутку, когда появляется экранная клавиатура, а обычный UIViewController - нет.

A UITableViewController надежно перемещает отредактированную область в пределах представления, без необходимости возиться с уведомлениями клавиатуры. Он сделал это с самого начала iOS, в то время как уведомления о клавиатуре изменились, редко обеспечивая обратную совместимость.

Всякий раз, когда просмотр требует редактирования (например, экран входа в систему), рассмотрите возможность использования UITableViewController и воспользуйтесь этой уникальной функцией с точностью 0 строк кода.

К сожалению, обычный UIViewController, использующий протокол UITableViewDelegate, предлагает не эту функциональность.

UITableViewController

Работает с рассвета iPhone OS до сегодня.

► Найти это решение на GitHub и дополнительные сведения о Swift Рецепты.

Ответ 3

UITableViewController позволяет иметь статическую таблицу на iOS5

Ответ 4

Единственное, что UITableViewController имеет/делает, что обычный UIViewController не является, является свойством tableView и соответствует протоколам UITableViewDelegate и UITableViewDataSource. Ad RolandasR указывает, что установка контроллера представления (потомок) UITableViewController также позволяет использовать статические ячейки таблицы.

Ответ 5

Основным преимуществом использования UITableViewDelegate является простота. Однако есть преимущества для создания собственного TableViewController, который не предполагает, что представление представляет собой таблицу:

1) Вы можете добавить другие элементы, а таблица займет меньшую часть экрана. 2) Вы можете добавить целую кучу вспомогательных методов, которые доступны для всех VC, которые производятся от вашего контроллера. Я реализую вспомогательные методы, чтобы автоматически возвращать высоту строки, когда у меня разные типы UITableViewCell, а также автоматическая регистрация различных ячеек, методы получения ссылки на ячейки из CGPoint в таблице, обратные вызовы pull-to-refresh и т.д.

Хотя вы всегда можете получить UITableViewController и добавить вспомогательные методы, я думаю, что основное преимущество заключается не в том, что таблица занимает весь вид.