2013-04-20 59 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