Я немного повозился с UITableViewDiffableDataSource
и смог загрузить tableView для загрузки без проблем. Я пытаюсь создать заголовки разделов в tableView, однако я столкнулся с некоторым некорректным поведением.
Перечисление перечисления раздела определено следующим образом:
enum AlertLevel: String, Codable, CaseIterable {
case green = "green"
case yellow = "yellow"
case orange = "orange"
case red = "red"
}
Это моя реализация для tableView(viewForHeaderInSection:)
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let label = UILabel()
label.text = dataSource.snapshot().sectionIdentifiers[section].rawValue.capitalized
label.textColor = UIColor.black
return label
}
Это дает мне 4 метки, расположенные в ячейках заголовка в верхней части моего tableView.
Я запустил Dash в RTFD и увидел, что tableView(titleForHeaderInSection:)
- это еще один способ создания скинаэтот кот. Таким образом, я добавил это вместо:
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return dataSource.snapshot().sectionIdentifiers[section].rawValue.capitalized
}
Я добавил точку останова, и она никогда не попадет в цель. Поэтому я реализовал tableView(heightForHeaderInSection:)
, и заголовок обновляется, но строка для заголовка не отображается.
Таблица загружает ОЧЕНЬ много быстрее, чем по «старомодному» с IndexPaths
(я используюБаза данных землетрясений USGS для изучения TableViewDiffableDataSource
), но я не могу заставить отображаться заголовки.
Кто-нибудь получил представление о том, как заставить секции работать с TableViewDiffableDataSource
? Мне трудно поверить, что они выпустили что-то подобное в дикую природу без такой базовой функциональности, так что мне осталось сделать вывод, что я что-то запутал ... что, я не знаю:)
Ох ... и вот как я определяю свой источник данных:
func makeDataSource() -> UITableViewDiffableDataSource<AlertLevel, Earthquake> {
return UITableViewDiffableDataSource(tableView: tableView) { tableView, indexPath, earthquake in
let cell = tableView.dequeueReusableCell(withIdentifier: self.reuseID, for: indexPath)
cell.textLabel?.text = earthquake.properties.title
cell.detailTextLabel?.text = earthquake.properties.detail
return cell
}
}