【问题标题】:Maintain collection view selected state after table view cell reloadData在表视图单元格 reloadData 后保持集合视图选定状态
【发布时间】:2021-10-29 11:04:27
【问题描述】:

我有一个集合视图和一些其他数据作为表格视图单元格的一部分。 集合视图单元格是可选择的,以确保一个项目的单一选择。 现在的用例是我需要进行 API 调用来刷新单元格的数据。获取 API 后,我重新加载表格视图单元格:

tableView.reloadRows(at: [indexPath], with: .automatic)

问题是重新加载表格视图也会丢失集合视图单元格的选定状态。 有什么方法可以保留所选状态重新加载单元格而不重新加载集合视图

任何人有想法,请帮助。

【问题讨论】:

  • 最有效的方法是在数据模型中添加isSelected 属性。

标签: ios swift uitableview uicollectionview tableview


【解决方案1】:

我的想法是使用一个变量。每次单击单元格时,都会将 indexPath 更新为变量。

var clickCell: IndexPath?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  clickCell = indexPath // update value
}

并在重新加载表格视图后添加此代码

if let index = clickCell {
  tableView.selectRow(at: index, animated: true, scrollPosition: .none)
}

【讨论】:

  • 需要在table view cell里面选择collection view的item。我尝试使用 collectionview.selectItem 但没有用。
  • 我创建了一个变量,用于在加载表格视图单元格之前保留集合视图的选定单元格索引。然后在单元格重新加载后保存在变量中的索引处使用collectionview.selectItem。那没用。
【解决方案2】:

我能想到的最简单的选择是使用 UICollectionView 和 compositionalLayout 而不是你的 tableView 并保存选定的项目索引。

另一种选择是将 collectionView 对象的选定状态保存在 tableView 数据源中,即假设您有一个项目列表(A 类型)构建您的 tableView 单元格,其中一个项目列表(类型B) 构建 collectionView 单元格,当您选择一个项目(B 类型)时,更新外部列表中的该项目(A 类型项目)

获取新结果时,请确保在替换之前从当前结果更新所选状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多