Как добавить имя заголовка в UITableViewDiffableDataSource

Я пытаюсь добавить заголовок для каждого раздела в UITableView, но в данном случае это UITableViewDiffableDataSourceи я понятия не имею, где мне это делать. Часть моего кода:

private func prepareTableView() {
    tableView.delegate = self
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    dataSource = UITableViewDiffableDataSource<Sections, User>(tableView: tableView, cellProvider: { (tableView, indexPath, user) -> UITableViewCell? in
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = user.name
        return cell
    })
}

private func addElement(_ user: User) {
    var snap = NSDiffableDataSourceSnapshot<Sections, User>()
    snap.appendSections([.main, .second])
    if isFirst {
        users.append(user)
    } else {
        secondUsers.append(user)
    }
    snap.appendItems(users, toSection: .main)
    snap.appendItems(secondUsers, toSection: .second)
    isFirst.toggle()
    dataSource.apply(snap, animatingDifferences: true, completion: nil)
    dataSource.defaultRowAnimation = .fade
}

UICollectionViewDiffableDataSource имеет параметр supplementaryViewProviderгде пользователь может настроить заголовки. Есть ли что-то подобное вUITableViewDiffableDataSource

2 ответа

Решение

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

class MyDataSource: UITableViewDiffableDataSource<Sections, User> {

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

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

dataSource = UITableViewDiffableDataSource<Sections, User>

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

dataSource = MyDataSource<Sections, User>

Да, посмотрите supplementaryViewProvider свойство UICollectionViewDiffableDataSource

У Apple на самом деле не так много документации по этому поводу, но вы можете инициализировать его с помощью замыкания, аналогичного тому, как вы инициализируете сам источник данных для различий. Он возвращаетUICollectionReusableView который может быть либо общим представлением, либо одним из подклассов представления верхнего или нижнего колонтитула.

Другие вопросы по тегам