我似乎无法让这个为我工作,我没有找到任何其他类似问题的答案。
我正在使用Swift并且需要知道如何能够在我的应用中选择“全部选择”按钮选择所有可见&不可见的细胞就像iOS上的照片应用程序一样。
我的应用程序也处理照片,因此每个单元格都有两个UIImageViews,一个是有问题的照片,另一个是隐藏的UIImageView,在选择图像时出现(它只是一个复选标记)。
我一直在使用的代码(不起作用)是:
for cell in self.collectionView.visibleCells() as! [ImageCell]{
if cell.checkMark.hidden{
cell.checkMark.hidden = false
}
else{
cell.checkMark.hidden = true
}
}
答案 0 :(得分:3)
我认为理解控制是如何工作的很好。 UICollectionView
和UITableView
都只创建并显示足够的单元格以适应屏幕(对于滚动缓冲区可能还需要更多)。这是为了处理app可能具有大量数据的情况。例如,如果用户有1000张照片,如果1000实际显示在屏幕上和屏幕外,那么性能将会很糟糕。
话虽这么说,你应该通过模型来处理选择。有很多方法可以做到这一点,但有一种方法是:
让每个单元格都由一个至少有photo
和isSelected
作为属性的自定义对象表示。每次用户选择或取消选择单元格时,只需更新isSelected
属性即可。在collectionView:cellForItemAtIndexPath:
中,根据isSelected
属性显示复选标记。通过简单地遍历数组并更新该属性来选择全部,然后调用reloadData
为每个单元格更新它。
因为您更新了数组并且UICollectionView
基于数组,所以每个单元格都会在屏幕上显示时被选中。