如何在 UITableViewDiffableDataSource 中添加标题名称

Pit*_*Pan 3 uitableview swift diffabledatasource nsdiffabledatasourcesnapshot

我尝试为 中的每个部分添加标题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
}
Run Code Online (Sandbox Code Playgroud)

UICollectionViewDiffableDataSource有一个参数supplementaryViewProvider,用户可以在其中配置标题。是否存在这样的东西UITableViewDiffableDataSource

Tun*_*Fam 13

我能够通过UITableViewDiffableDataSource像这样子类化这个类来做到这一点:

class MyDataSource: UITableViewDiffableDataSource<Sections, User> {

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

Run Code Online (Sandbox Code Playgroud)

然后在你的代码中而不是这样:

dataSource = UITableViewDiffableDataSource<Sections, User>
Run Code Online (Sandbox Code Playgroud)

使用您自己的数据源类:

dataSource = MyDataSource<Sections, User>
Run Code Online (Sandbox Code Playgroud)