持久集合视图单元格选择
Posted
技术标签:
【中文标题】持久集合视图单元格选择【英文标题】:Persistent Collection View Cell Selection 【发布时间】:2018-05-08 17:54:40 【问题描述】:请多多包涵,因为我是 Swift 编程新手。
我有一个myCollectionViewController
,它是UICollectionViewController
的子类。 MyCollectionViewController
的单元格是MyCollectionViewCell
的一个类,它是一个自定义的UICollectionViewCell
。
我要做的是根据用户选择更改MyCollectionViewCell
的背景,并在用户滚动到MyCollectionViewController
的其他单元格时保持此选择。我尝试了两种方法来做到这一点,但到目前为止都失败了。
第一种方式是在MyCollectionViewController
的didSelectItemAt
方法中写代码:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! MyCollectionViewCell
cell.contentView.backgroundColor = UIColor.red
但是,这不起作用,单元格颜色没有改变。
我尝试这样做的另一种方法是更改MyCollectionViewCell
的isSelected
属性。
override var isSelected: Bool
// Change what happens when the user selects a cell
didSet
if self.isSelected
self.contentView.backgroundColor = Colours.primary
else
self.contentView.backgroundColor = Colours.secondary
虽然这有效,但选择并没有持续。也就是说,当用户滚动到collectionView
中的另一个单元格然后再滚动回来时,选择就消失了。
任何建议将不胜感激。
【问题讨论】:
【参考方案1】:不要在didSelectItemAt
中使用 dequeue,因为它会返回单击的单元格以外的其他单元格
var allInde = [IndexPath]()
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
let cell = collectionView.cellForItem(at:indexPath) as! MyCollectionViewCell
cell.contentView.backgroundColor = UIColor.red
if !(allIndex.contains(indexPath))
allInde.append(indexPath)
并在 cellForItem 中检查要显示的索引路径是否在数组中并为其着色
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "id", for: indexPath as IndexPath) as! MyCollectionViewCell
if allIndex.contains(indexPath)
cell.contentView.backgroundColor = Colours.primary
else
cell.contentView.backgroundColor = Colours.secondary
//这里更新代码
SPRAIN
【讨论】:
您能否说明我如何在最后一步进行检查? 第一个部分(选中时更改颜色)正在工作。虽然颜色一直存在,但它现在正在改变其他单元格的颜色关于如何解决这个问题有什么建议吗? 如果每个单元格在选择时都有不同的颜色,那么您必须在数组中保留带有 indexpath 的颜色,但如果它们只有 2 种颜色,则根据答案在它们之间切换 每个单元格只能有两种颜色中的一种。但是,问题是某些单元格的索引路径是相同的(因为我的“MainCollectionView”中实际上有一个NestedCollectionView
)。
你能看看我的源代码吗?以上是关于持久集合视图单元格选择的主要内容,如果未能解决你的问题,请参考以下文章