Swift - 在Collection View中选择项目

时间:2015-02-28 15:44:15

标签: ios swift collectionview

我在集合视图中遇到选定项目的问题。

所选项目将backgroundColor更改为蓝色,但似乎可重复使用的单元格也会受到影响。

我的代码如下:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
  var cell = collectionView.cellForItemAtIndexPath(indexPath) as UICollectionViewCell?
  cell?.contentView.backgroundColor = UIColor.blueColor()

func collectionView(collectionView: UICollectionView, didDeslectItemAtIndexPath indexPath: NSIndexPath) {
  var cell = collectionView.cellForItemAtIndexPath(indexPath) as UICollectionViewCell?
  cell?.contentView.backgroundColor = UIColor.blackColor()
}

func collectionView(collectionView: UIControllerView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
  let cell: boxCell = collectionView.dequeueReusableCellWithReuseIdentifier("demoCell", forIndexPath: indexPath) as boxCell

  cell.cellTitle.text = name[indexPath.row]
}

当我运行应用程序时,选择工作,选择另一个单元格,取消选择其他选定单元格,但是当我滚动时,可重复使用的单元格也变为蓝色。

我使用的是水平滚动方向,每行只有1行和4个单元格。

我哪里出错了?还有其他人有过这个问题吗?

2 个答案:

答案 0 :(得分:0)

它的正常行为 - 原因是这些项目被重复使用,重复使用后,它们会通过cellForItemAtIndexPath而你没有设置背景颜色,所以它们会保留你设置的最后一个 - 在你的情况下didSelect方法。

您应该创建一个NSSet,以便在选择/取消选择时保留所有选定的NSIndexPath并添加/删除NSIndexPath

设置背景颜色逻辑应该在cellForItemAtIndexPath中完成 - 检查NSIndexPath中是否存在NSSet后,您设置了所需的颜色。

在选择时,您还必须重新加载某个元素,因此它会为您单击的元素调用cellForItemAtIndexPath

答案 1 :(得分:0)

在细胞类中使用prepare for resue方法。它会正常工作。

override func prepareForReuse()
 {
        self.backgroundColor = UIColor.lightGrayColor()
 }