Создание заголовка раздела с помощью UITableViewDiffableDataSource - PullRequest
1 голос
/ 26 октября 2019

Я немного повозился с 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
    }
}

1 Ответ

0 голосов
/ 28 октября 2019

Я смог сделать это, создав подкласс класса UITableViewDiffableDataSource следующим образом:

class MyDataSource: UITableViewDiffableDataSource<AlertLevel, Earthquake> {

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "Hello, World!"
    }
}

и затем в своем коде вместо этого:

dataSource = UITableViewDiffableDataSource<AlertLevel, Earthquake>

используйте свои собственные данныеИсходный класс:

dataSource = MyDataSource<AlertLevel, Earthquake>
...