Заголовок 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
        }

    }

0 ответов

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