Ответ
UITableView — это ключевой компонент UIKit для отображения прокручиваемых списков данных. Его работа основана на принципах переиспользования ячеек и разделения ответственности через протоколы.
Основные компоненты:
-
UITableViewDataSource— протокол, поставляющий данные и ячейки для таблицы.// Обязательные методы: func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // Переиспользование ячейки — ключ к производительности let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) cell.textLabel?.text = dataArray[indexPath.row] return cell } -
UITableViewDelegate— протокол, отвечающий за внешний вид и взаимодействие (высота строк, выбор, заголовки секций).func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // Обработка нажатия на строку tableView.deselectRow(at: indexPath, animated: true) }
Жизненный цикл ячейки и переиспользование:
Когда ячейка уезжает за пределы экрана, она не уничтожается, а помещается в очередь переиспользования. Когда требуется отобразить новую строку, система вызывает dequeueReusableCell, чтобы взять ячейку из очереди, избегая дорогостоящего создания нового объекта. Поэтому в cellForRowAt необходимо полностью переконфигурировать ячейку под новые данные.
Настройка:
- Регистрация ячейки: Необходима до использования. Можно зарегистрировать класс или UINib (xib-файл).
tableView.register(MyCustomCell.self, forCellReuseIdentifier: "MyCell") - Секции: Таблица может иметь несколько секций с собственными заголовками и футерами.
- Современные практики: Использование диффируемых источников данных (
UITableViewDiffableDataSource, iOS 13+) упрощает управление состоянием и анимацию обновлений.
Альтернатива: UICollectionView предлагает более гибкие макеты (сетки, карусели), но UITableView остается оптимальным выбором для простых вертикальных списков.