【发布时间】:2020-02-24 06:48:55
【问题描述】:
我有一个主 ViewController,MainViewController,其中包含许多视图以及一个 TableView。
每一行(即tableViewCell)包含来自不同来源/视图等的不同内容。tableView 中的许多行又包含一个名为SettingsCollectionView 的CollectionView。在tableView 的cellForRowAt 方法中,我为tableViewCell 初始化SettingsCollectionView,并将CollectionView 子类用作其数据源的相应数据传递给它。比如:
tableView 第 0 行 - 包含通用内容
tableView 第 1 行 - settingsCollectionViewA : SettingsCollectionView 以及结构 OriginalDataA
tableView 第 2 行 - 包含通用内容
tableView 第 3 行 - settingsCollectionViewB : SettingsCollectionView 以及结构 OriginalDataB
tableView 第 4 行 - settingsCollectionViewC : SettingsCollectionView以及一个结构 OriginalDataC
tableView 第 5 行 - 包含通用内容
当我用OriginalDataA 初始化settingsCollectionViewA 时,我在CollectionView 中有一个setter,然后在LocalDataA 下设置本地数据。这使我能够确保我拥有基于用户进行更改等的数据的原始副本和工作副本。每当我从MainViewController 调用OriginalDataA 变量时,settingsCollectionViewA 中的 getter 都会进行一些清理数据等,然后我可以在MainViewController 中用它做我想做的事。
这部分一切正常,除非这些 tableView 单元格出列,当它们重新出现时,我会返回那个 tableViewCell 的原始状态,然后是 collectionView 而不是用户离开它的状态。
我意识到这是因为每个 SettingsCollectionView 类都在使用自己的 OriginalDataA、OriginalDataB 等本地副本,我很感激我可以只更新 原始数据,但这会创建其他复杂性——比如为SettingsCollectionView 子类构建的当前“独立”代码的简洁性以及原始数据与更新数据的复杂性。这就是为什么我坚持使用更好的编程方法......
抱歉,这似乎是一个基本问题,但我对编程和所有示例等都是新手。我发现所有这些都涉及更简单的场景,而不是我正在尝试做的事情。
我没有包含代码,因为它有很多其他内容和功能,我认为这些内容和功能只会混淆上述概念。
任何帮助将不胜感激。
【问题讨论】:
-
你的 originalDataA 是等结构还是类?
-
它们是结构体
-
如果它们是结构,您将需要您的视图控制器来保存工作副本以及原始副本,并通过委托或回调闭包更新工作副本。如果您创建数据类,那么您可以让视图控制器保存对工作副本实例的引用并将更新保存在单元格中。另一种可能更好的替代方法是创建一个类来保存您的工作副本结构并将此类实例传递给单元格
-
谢谢。这就说得通了。我想我只是对如何更新说
copyOfOriginalDataA感到困惑。如果我将它注入SettingsCollectionView,那么它不是整个SettingsCollecdtionView中可用的变量,而只能在该方法中使用。所以试图在例如使用它numberOfItemsInSection等让我很难过。我觉得我在这里遗漏了一些非常明显的东西! -
@Paulw11 是正确的,您需要拥有 orignalData,即您将使用的 orignalData 的副本。当您的工作完成时,使用 copyOfOrignalData 更新 orignalCopy。如果您要添加/更新/重置数据,我认为您也应该转向类而不是结构
标签: ios swift uitableview uicollectionview