gpt4 book ai didi

ios - 使用 UICollectionViewDiffableDataSource 时如何重新加载 UICollectionView 部分中的数据?

转载 作者:行者123 更新时间:2023-12-01 21:30:59 28 4
gpt4 key购买 nike

我正在使用 UICollectionViewDiffableDataSource对于我的 collectionView 的数据源。我的 CollectionView 中有 3 个部分:

enum Section {
case section1
case section2
case section3
}
最初,我使用以下代码将这 3 个部分附加到 collectionView:
var snapshot = self.diffableDataSource.snapshot()
snapshot.appendSections([.section1, .section2, .section3])
self.diffableDataSource.apply(snapshot)
然后我使用以下代码将项目附加到部分:
var snapshot = self.diffableDataSource.snapshot()
snapshot.appendItems([myItems], toSection: .section1)
self.diffableDataSource.apply(snapshot)
我的问题是我无法弄清楚如何使用一组新项目重新加载集合 View 中的部分而不将它们附加到当前项目。 snapshot 可用的方法只允许将项目附加到该部分,但我需要替换该部分的项目。我尝试删除该部分,将其附加回来,然后附加新的项目集:
snapshot.deleteSections([.section1])
snapshot.appendSections([.section1])
snapshot.appendItems([myItems], toSection: .section1)
这只会删除该部分,但不会加载新项目。我正在寻找一种方法来简单地用新项目刷新该部分,类似于您调用 collectionView.reloadData() 的方式。使用普通 UICollectionViewDataSource 时。

最佳答案

直接修改快照

  • 确定该部分中的项目
  • 删除项目
  • 追加新项目
  • 重新加载部分
  • 应用快照

  • 这是作为 UICollectionViewDiffableDataSource 扩展的通用方法
    extension UICollectionViewDiffableDataSource {

    func replaceItems(_ items : [ItemIdentifierType], in section: SectionIdentifierType) {
    var currentSnapshot = snapshot()
    let itemsOfSection = currentSnapshot.itemIdentifiers(inSection: section)
    currentSnapshot.deleteItems(itemsOfSection)
    currentSnapshot.appendItems(items, toSection: section)
    currentSnapshot.reloadSections([section])
    apply(currentSnapshot, animatingDifferences: true)
    }
    }
    请以大写字母和单数形式( MyItem )命名表示数据源的结构。

    关于ios - 使用 UICollectionViewDiffableDataSource 时如何重新加载 UICollectionView 部分中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62995493/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com