我正在使用集合视图,每次选择单元格时,我都会将单元格背景颜色更改为红色。很简单:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)! as! CustomCell
cell.backgroundColor = .red
}
这绝对没问题。当我从左到右选择前三个单元格时,背景颜色会像我预期的那样发生变化:
但是,如果我在选择单元格后重新加载collectionView,则选择顺序开始表现得很奇怪。当我从左到右以相同的顺序选择相同的前3个单元格时,将选择不同的单元格:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)! as! CustomCell
cell.backgroundColor = .red
collectionView.reloadData()
}
Apple的文档很神秘。 https://developer.apple.com/documentation/uikit/uicollectionview/1618078-reloaddata
他们说"这会导致集合视图丢弃任何当前可见的项目(包括占位符),并根据数据源对象的当前状态重新创建项目。 "但这让我觉得在调用reloadData()时,collectionViewCells将返回灰色而不会跳转indexPaths。
任何人都可以解释reloadData()中发生的事情,使索引路径排序的单元格选择如此奇怪吗?
答案 0 :(得分:-1)
首先你需要使用出队单元
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:"CustomCell", for: indexPath) as! CustomCell
在单元格中,您可以使用
-(void)prepareForReuse {
// Set default implementation
}