Заголовок UICollectionViewDiffableDataSource не запускается
Заголовок моего источника данных diffable не срабатывает. У меня есть один раздел, который представляет собой несколько сообщений и заголовок. Заголовок содержит кнопку "следовать", которая должна подписываться на пользователя или отменять его.
Когда я нажимаю на кнопку, некоторые данные обновляются, и данные перезагружаются. Я могу подтвердить, что ячейки работают, но заголовок не меняется.
Соответствующий код ниже.
enum Section: CaseIterable {
case main
case header
}
fileprivate var collectionView: UICollectionView! = nil
fileprivate var datasource: UICollectionViewDiffableDataSource<Section, User>?
var user: User! = nil {
didSet {
self.updateDataSourceWith(user: user)
}
}
private func createLayout() -> UICollectionViewLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(50))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(50))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
let headerSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(50))
let sectionHeader = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: headerSize, elementKind: ProfileController.sectionHeaderElementKind, alignment: .top)
section.boundarySupplementaryItems = [sectionHeader]
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
}
fileprivate func configureDataSource() {
//this fires when the button is clicked
self.datasource = UICollectionViewDiffableDataSource<Section, User>(collectionView: self.collectionView) {
(collectionView: UICollectionView, indexPath: IndexPath, user: User) -> UICollectionViewCell? in
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: PostCell.reuseIdentifier, for: indexPath) as? PostCell else { fatalError("Cannot create cell")}
if let posts = self.user.posts?.map({$0}) {
if let url = URL(string: posts[indexPath.row].imageUrl!) {
cell.postImageView.sd_setImage(with: url)
}
if let postText = posts[indexPath.row].text {
cell.postTextLabel.text = postText
}
let username = posts[indexPath.row].user.fullName
cell.usernameLabel.text = username
}
return cell
}
//this does not fire
self.datasource?.supplementaryViewProvider = { (collectionView: UICollectionView, kind: String, indexPath: IndexPath) -> UICollectionViewCell in
guard let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: ProfileHeaderCell.reuseIdentifier, for: indexPath) as? ProfileHeaderCell else { fatalError("Cannot create a cell") }
header.user = self.user
header.delegate = self
print(indexPath.section)
return header
}
}