【发布时间】:2021-08-28 02:00:06
【问题描述】:
我可能有多个从同一模型更新的表格单元格。我希望能够在模型更改时更新所有这些。所以我假设我会使用 KVO 来做到这一点。我的问题是,我怎样才能让每个人对模型的任何更改做出反应,而不仅仅是每个单元格将显示的部分?即,如果模型中的一项发生更改,我希望所有单元格都自行更新。
【问题讨论】:
标签: ios uitableview model uikit key-value-observing
我可能有多个从同一模型更新的表格单元格。我希望能够在模型更改时更新所有这些。所以我假设我会使用 KVO 来做到这一点。我的问题是,我怎样才能让每个人对模型的任何更改做出反应,而不仅仅是每个单元格将显示的部分?即,如果模型中的一项发生更改,我希望所有单元格都自行更新。
【问题讨论】:
标签: ios uitableview model uikit key-value-observing
尝试在更改模型后立即使用 tableView.reloadData()。另一方面,您也可以尝试使用 RxSwift 并将您的模型项绑定到 tableView - 然后,每当模型更改时,您的 tableview 将重新加载。参考这些文章作为 RxSwift 与 tableView 一起使用的简单示例: http://rx-marin.com/post/bind-multiple-cells/ https://daddycoding.com/2020/04/20/rxswift-uitableview-with-section/
【讨论】:
所以我假设我会使用 KVO 来做到这一点。
表格单元格是非常短暂的 - 表格中给定行的单元格几乎会在它滚出屏幕时被重新用于不同的行。所以长期关系真的不是细胞擅长的事情,你可能不想去设置一个细胞来直接观察你的模型的一部分。相反,让视图控制器担心模型并在模型更改时重新加载任何受影响的单元格。如果你想使用键值观察让视图控制器观察模型,那可以正常工作。
我的问题是,我如何让每个人对模型的任何更改做出反应,而不仅仅是每个单元格将显示的部分?
当视图控制器得知模型已经改变时,它应该告诉表重新加载它的数据。此时,表格将经历重新创建可见单元格的过程,其效果将是所有单元格都将出现“自我更新”。
【讨论】:
reloadData 时,表格视图只会要求其数据源重新创建可见行的单元格。如果您遵循正常模式,直到有实际理由不这样做,您的生活会轻松很多。
请在数据更改后尝试使用tableView.reloadData()重新加载表格。
【讨论】: