IOS开发之因Cell重用导致控件的状态级联改变

来源:互联网 发布:深圳网络推广外包 编辑:程序博客网 时间:2024/05/18 00:58

一个项目中由于要使用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                    }        }

感觉不是特别的有效率,但是确实解决了这个问题!

0 0