点击集合视图项会导致集合视图中的多个选择,而不是单个选择

时间:2016-11-19 08:14:20

标签: ios swift

我有一个UICollectionView和一个自定义单元格。自定义单元格包含一个UIImageView和一个UILabel

  1. 我想更改UIImageView的背景颜色,当我点击相应的单元格时(在didSelectItemAt indexPath方法中我想要访问自定义单元格属性)。有没有办法实现这个目标?或者我应该采取其他方式吗?
  2. 当我点击UICollectionView中的任何项目时,我得到的另一个问题是,正在进行多项选择。意味着可重复使用的细胞也被选中。
  3. 有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

第一个问题

请参阅this链接,因为它包含有关如何访问单元格及其属性的说明。 (适用于UITableView,但UICollectionView

可以做同样的事情

第二个问题

您必须在didSelectRowcellForRowAtIndexPath更新模型,您必须根据该模型设置单元格的颜色。

第二点的另一个解决方案是将选定的indexPath存储在一个     数组并在cellForRowAtIndexPath检查是否indexPath     存在于该数组中并适当设置其颜色。例如:

var array = [Int]()
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
      //update model or
      array.append(indexPath.item)
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    //check model or
    if(array.contains(indexPath.item)){


    }else{

    }
}

答案 1 :(得分:0)

试试这个:

<强> 1。自定义UICollectionViewCell类:

import UIKit

class CustomCollectionViewCell: UICollectionViewCell
{
    //MARK: Outlets
    @IBOutlet weak var testImageView: UIImageView!
    @IBOutlet weak var testLabel: UILabel!

    //MARK: Lifecycle Methods
    override func awakeFromNib()
    {
        self.testImageView.image = nil
        self.testLabel.text = nil
    }

    override var isSelected: Bool{
        willSet{
            super.isSelected = newValue
            if newValue
            {
                self.backgroundColor = UIColor.lightGray
            }
            else
            {
                self.backgroundColor = UIColor.groupTableViewBackground
            }
        }
    }
}

<强> 2。将UICollectionViewDelegate方法实施为:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
    collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredVertically)
}

您可以根据需要更改单元格选择和默认颜色。