繁体   English   中英

Diffable Snapshot 重新加载部分标题

[英]Diffable Snapshot reload section header

当使用NSDiffableDataSourceSnapshot重新加载表视图数据时,表视图只会重新加载包含与前一个快照不同的部分。

我有一个表视图,其中包含具有特定日期的条目。 根据用户在段控件中选择的内容,条目按条目周/月/自定义日期范围的部分排序。

当我有一个星期部分并且本周是本月唯一存在的一周时,当用户选择不同的日期范围并且标题将保持不变时,该部分将不会更新。

无论此快照与上一个快照之间是否存在差异,如何重新加载所有节标题?

这是设置快照的代码:

struct EntriesSection {

    let date: Date
    var entries: [Entry] = []
}

var sections: [EntriesSection]()

private func setupSnapshot() {

    snapshot = NSDiffableDataSourceSnapshot<Date, Entry>()

    sections.forEach {
        snapshot.appendSections([$0.date])
        snapshot.appendItems($0.entries, toSection: $0.date)
    }

    dataSource?.apply(snapshot, animatingDifferences: true)
}

结果:

提前致谢。

问题在于第一部分的标题没有改变。

该部分的类型为Date - NSDiffableDataSourceSnapshot<Date, Entry>()并且周和月的开始日期都在同一天,即2019 年 12 月 1 日

因此,就快照而言,周和月的日期仍然相同。

为了解决它,我创建了一个日期范围的对象:

struct DateRange: Hashable {
  let from: Date
  let to: Date
}

然后将快照部分类型从Date更改为DateRange

NSDiffableDataSourceSnapshot<DateRange, Entry>()

现在,如果开始日期相同而结束日期更改,则快照将知道他需要更新标题。

这也有效:

var updatedSnapshot = dataSource.snapshot()
updatedSnapshot.reloadSections([.main])
self.dataSource.apply(updatedSnapshot, animatingDifferences: true)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM