2013-04-20 97 views
8

我有UICollection,其中將有許多學生項目和每個項目中有用於記錄考勤的開關。我通過這樣的所有可見單元循環。循環遍歷UICollectionview中的所有單元格

for(attendancecollectionViewCell* cells in [[self collectionView] visibleCells]){ 

    NSLog(@"The switch value : %c",cells.attendanceSwitchLabel.isOn); 

} 

但是,我想循環所有的細胞出席,而不僅僅是可見的細胞。

+0

除非需要操作單元格,否則應該遍歷單元格從中配置的數據源。 – 2014-08-05 06:59:46

回答

13

您不能遍歷不可見的單元格,因爲這些單元格不存在。像UITableView一樣,UICollectionView在屏幕外立即重用它們。也就是說,如果向下滾動,需要一個已經滾動的單元格並將其用於將要滾動到視圖中的「新」單元格。

如果您希望爲集合中的條目保存狀態,則必須將其與單元格本身分開存儲。例如,映射到indexPath.row值的結構(或自定義NSObject)的NSArray。

對你來說更重要的問題將是:你想在循環中實現什麼?

讓我知道你是否需要更多的信息或示例代碼。

+0

我想我想訪問不可見單元格的有效示例 - 我的問題就在這裏,如果你有一個秒http://stackoverflow.com/questions/33259244/how-to-redraw-non-visible-uicollectionviewcells -after-rotation-ready-for-when-r – Greg 2015-10-23 10:40:41

+3

「因爲這些單元不存在」:這是不正確的。細胞確實存在,因爲它們被重用。它們存在並正在等待被重用。但是我有可複製的證據,其中單元格不在可見單元格中並被再次使用(即:沒有調用DequeueReusableCell)。 – Softlion 2016-12-19 07:17:11

+4

@Softlion我有同樣的問題。事實證明這是一個iOS10的事情,即使在離開屏幕之後,細胞有時仍會呆在附近。您可以通過執行'''collectionView.prefetchingEnabled = NO'''來禁用這種行爲。 – alemangui 2017-01-18 10:38:29