簡體   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