对于 UICollectionViewDiffableDataSource,是否可以直接更新给定部分/行的单元格,而不必构建整个快照?
For UICollectionViewDiffableDataSource, is it possible to direct cell update for a given section/ row, without having to build entire snapshot?
对于 UICollectionViewDiffableDataSource
,我想知道是否有可能对给定的部分/行执行直接单元格更新,而无需构建整个 NSDiffableDataSourceSnapshot
快照?
有时,我需要对选定的部分/选定的行执行实时连续更新。必须为每个实时更新构建整个数据源快照,似乎效率不高。
如果可以的话,我可以知道涉及的步骤是什么吗?
如果那不可能,是因为 UICollectionViewDiffableDataSource
框架的设计决定吗?
自 iOS15 以来,我们有一种有效的方法来更新所选项目行
private func reconfigureRecordingRow(_ recording: Recording) {
var snapshot = dataSource.snapshot()
snapshot.reconfigureItems([recording])
dataSource.apply(snapshot)
}
private func makeDataSource() -> DataSource {
let dataSource = DataSource(
collectionView: collectionView,
cellProvider: { [weak self] (collectionView, indexPath, anyHashable) -> UICollectionViewCell? in
guard let self = self else { return nil }
guard let recordingCell = collectionView.dequeueReusableCell(
withReuseIdentifier: "recording",
for: indexPath) as? RecordingCell else {
return nil
}
调用reconfigureRecordingRow
时,会执行cellProvider的函数
collectionView.dequeueReusableCell
能够 re-use existing UICollectionViewCell
,无需构建新的 UICollectionViewCell
对于 UICollectionViewDiffableDataSource
,我想知道是否有可能对给定的部分/行执行直接单元格更新,而无需构建整个 NSDiffableDataSourceSnapshot
快照?
有时,我需要对选定的部分/选定的行执行实时连续更新。必须为每个实时更新构建整个数据源快照,似乎效率不高。
如果可以的话,我可以知道涉及的步骤是什么吗?
如果那不可能,是因为 UICollectionViewDiffableDataSource
框架的设计决定吗?
自 iOS15 以来,我们有一种有效的方法来更新所选项目行
private func reconfigureRecordingRow(_ recording: Recording) {
var snapshot = dataSource.snapshot()
snapshot.reconfigureItems([recording])
dataSource.apply(snapshot)
}
private func makeDataSource() -> DataSource {
let dataSource = DataSource(
collectionView: collectionView,
cellProvider: { [weak self] (collectionView, indexPath, anyHashable) -> UICollectionViewCell? in
guard let self = self else { return nil }
guard let recordingCell = collectionView.dequeueReusableCell(
withReuseIdentifier: "recording",
for: indexPath) as? RecordingCell else {
return nil
}
调用reconfigureRecordingRow
时,会执行cellProvider的函数
collectionView.dequeueReusableCell
能够 re-use existing UICollectionViewCell
,无需构建新的 UICollectionViewCell