Существуют ли какие-либо преимущества в использовании 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
, предлагает не эту функциональность.
Работает с рассвета 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 и добавить вспомогательные методы, я думаю, что основное преимущество заключается не в том, что таблица занимает весь вид.