2015-11-23 68 views
1

我有一個控制器實現與UICollectionView,它有兩個部分。 段數據是從兩個不同的API中獲取的,並且返回順序是未知的。reloadSections:和reloadData單元沒有正確更新後的UICollectionView

返回第一節數據時,我調用reloadSections更新第一節的單元格。 當第二節數據返回時,我調用reloadData來更新整個單元格(包括第一節和第二節)

但是如果我在reloadSections之前調用reloadData,則單元格會正確更新。 在reloadData之前調用reloadSections時,第二部分中的項計數是正確的,但單元顯示的是重複內容,而不是新內容。

我寫了一個演示項目並向第二部分插入新數據,調用reloadData,將新數據插入到第一部分。收集視圖也可以正常工作。

它只是不起作用,當我打電話reloadSections:FirstSection,然後調用reloadData。

示範項目,可以在這裏找到: https://github.com/6david9/ReloadData/blob/master/ReloadData/ReloadData/ViewController.m

附:當我爲每個部分更新調用reloadSections時,結果是正確的!

p.s.當我爲第一部分調用reloadSections時,它將重新加載第一部分中的所有單元格。但在此之後,我調用reloadData它只調用cellForItem爲第二部分中的最後一項,我將新項目添加到第二部分的前面。所以它顯示了最後一個項目的最後一個項目的重複內容。

回答

0

但單元格顯示重複的內容,而不是新的內容。

最常見的原因是,如果您重新使用單元格,則必須清除單元格內容。例如:你應該刪除程序創建的視圖或清除字段或標籤值...

+0

錯誤不是由細胞重複使用 – 6david9

1

問題是,當重裝數據被稱爲集合視圖只調用

cellForItemAtIndexPath

第二列表爲第二個列表中的最後一個索引。所以你的數據是重複的。它應該重新加載整個集合視圖,但它不會這樣做。我認爲出於某種表現的原因,或者這是別的。也重裝文檔中他們說

「不要把它在一個動畫如插入或刪除中間的」

要調用它在這個過程中,因此,它是從集合視圖的一些性能效率。嘗試在其他場合調用這些插入,一旦集合視圖完全重新加載它。我運行了你的項目,並從斷點檢查中發現了這個結論。祝你好運

+0

我發現如果我爲每個部分更新調用reloadSections,它將正常工作。只調用reloadSections,然後reloadData它不會正確更新第二部分(它說我會將新數據插入後部,並且只在後部創建和更新新數據,這可能會將新數據插入到前部)。 – 6david9

+0

是reloadSections正常工作。是的,如果你在數組結尾添加數據,它會正常工作。因爲集合視圖僅通過提供結束索引路徑來調用數據增量。 –

相關問題