2016-11-19 92 views
0

我有一个UICollectionView和一个自定义单元格。定制单元包含一个UIImageView和一个UILabel点击集合视图项会导致集合视图中的多个选择,而不是单个选择

  1. 我想改变UIImageView的背景颜色,当我轻按对应的小区(在didSelectItemAt indexPath方法我想访问自定义电池特性)。有什么办法可以做到这一点?或者我需要一些替代方法?
  2. 我得到的另一个问题是,当我点击UICollectionView中的任何项目时,发生多项选择。意味着可重复使用的细胞也被选中。

有人能帮助我吗?

+0

你在swift中工作吗? –

+0

是的,我正在迅速工作。 –

回答

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) 
} 

您可以更改Ť他可根据您的要求选择单元格和默认颜色。

0

对于你的第一个问题

参考this链接,它包含了如何访问细胞及其属性的解释。 (这是为UITableView,但同样的事情可以为UICollectionView完成)

对于你的第二个问题

你将不得不在didSelectRow升级模型,然后在cellForRowAtIndexPath你将不得不设置的颜色基于该模型的单元格。

关于第二个点的另一种解决办法是将所选择的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{ 

    } 
} 
相关问题