一个项目中由于要使用checbox,但是IOS的提供的控件中并没有checkbox,因此项目中使用了一个VKCheckbox的第三方框架,这个框架本身很好用,效果也非常的好!
但是犹豫将这个控件加入到了cell中,由于cell重用的原因会把下一个重用这个cell的checkbox的状态和上一个相同:
例如:你选中了第一个cell的checkbox,假设第5个cell是重用的第一个,那么第5个cell也会是被选中的状态,想了好久试了好多办法也没有一个特别的效率高的办法,最后选择了一个方法,解决思路如下:
创建一个全局的字典,然后key是cell的indexPath.item,注意这里要转成Sting类型,value就是checkbox的状态0或1.刷新界面的时候根据字典里的状态来重新设置每个checkbox的状态。我是在
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
中添加的这个方法,就是在返回cell之前设置的具体的代码如下:
let item = String(indexPath.item)
///初始化这个字典,若去出来的数据为nil则证明这个checkbook的状态没有被初始化
if(self.checkBoxArray[item] == nil){
self.checkBoxArray[item] = 0
}
print("item=\(indexPath.item)=\(self.checkBoxArray[item])")
switch self.checkBoxArray[item]! {
case 0:
checkBox.setOn(false)
case 1:
checkBox.setOn(true)
default:
checkBox.setOn(false)
}
checkBox.checkboxValueChangedBlock = {
isOn in
///如果ison为true则为1,否则为0
if(isOn){
self.checkBoxArray[item] = 1
}else{
self.checkBoxArray[item] = 0
}
}
感觉不是特别的有效率,但是确实解决了这个问题!