繁体   English   中英

在 Swift 中使用 TableViews 和 CollectionViews 并管理多个数据源

[英]Working with TableViews and CollectionViews and managing multiple data sources in Swift

我有一个主 ViewController, MainViewController包含许多视图和一个TableView

每行(即tableViewCell )包含来自不同来源/视图等的不同内容。 tableViewCell的许多行又包含一个名为SettingsCollectionViewCollectionView tableViewcellForRowAt方法中,我初始化了该tableViewCellSettingsCollectionView并将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类都在使用自己的OriginalDataAOriginalDataB等本地副本,并且很感激我可以只更新原始数据,但这会产生其他复杂性 - 例如为SettingsCollectionView子类构建的当前“独立”代码的清洁度以及原始数据与更新数据的复杂性。 这就是为什么我坚持使用更好的编程方法......

抱歉,这似乎是一个基本问题,但我是编程和所有示例等的新手。我发现所有这些都涉及更简单的场景,而不是我想要做的事情。

我没有包含代码,因为它有很多其他的内容和功能,我认为这些内容和功能只会混淆上面概述的概念。

任何帮助将不胜感激。

考虑您有SettingsCollectionViewA显示originalDataA CollectionView 显示您在 cellforrowatindex 方法中提供的数据。 集合视图单元每次都重用内存。 在任何时间点都只有可见的单元格留在内存中。 所以用户修改的数据不会被显式存储,除非你修改了 originalDataA。

创建一个包含每个数据结构的类:

class MyDataModel {
    var dataA: DataA
    var dataB: DataB
    var dataC: DataC
}

然后创建一个MyDataModel实例并在视图控制器的属性中保存对它的引用。 将此相同的实例传递给您的表格视图单元格。 由于它是一个类,因此是一个引用类型,因此单元格所做的更改实际上将在此实例中进行。

暂无
暂无

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

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