Как добавить имя заголовка в 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
который может быть либо общим представлением, либо одним из подклассов представления верхнего или нижнего колонтитула.