持久集合视图单元格选择

Posted

技术标签:

【中文标题】持久集合视图单元格选择【英文标题】:Persistent Collection View Cell Selection 【发布时间】:2018-05-08 17:54:40 【问题描述】:

请多多包涵,因为我是 Swift 编程新手。

我有一个myCollectionViewController,它是UICollectionViewController 的子类。 MyCollectionViewController 的单元格是MyCollectionViewCell 的一个类,它是一个自定义的UICollectionViewCell

我要做的是根据用户选择更改MyCollectionViewCell 的背景,并在用户滚动到MyCollectionViewController 的其他单元格时保持此选择。我尝试了两种方法来做到这一点,但到目前为止都失败了。

第一种方式是在MyCollectionViewControllerdidSelectItemAt方法中写代码:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! MyCollectionViewCell

    cell.contentView.backgroundColor = UIColor.red

但是,这不起作用,单元格颜色没有改变。

我尝试这样做的另一种方法是更改​​MyCollectionViewCellisSelected 属性。

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)。 你能看看我的源代码吗?

以上是关于持久集合视图单元格选择的主要内容,如果未能解决你的问题,请参考以下文章

从 UITest 中选择集合视图中的第一个单元格

自动选择集合视图的中间可见单元格

如何根据集合视图中的单元格选择来控制表格视图的内容?

无法在集合视图中选择几个单元格

如何为集合视图单元格使用图像选择器

在 1 个集合视图中选择单元格以更改第二个集合视图属性(Xcode)