情景
- 今天我在做一個(gè)相冊(cè)選擇問題中雇卷,發(fā)現(xiàn)當(dāng)點(diǎn)擊第一個(gè)cell時(shí)cell中but的圖片發(fā)生改變了但是繼續(xù)往下滑的時(shí)候就出現(xiàn)了問題我只點(diǎn)擊了一個(gè)但是 下面的cell的中btn的圖片也改變了~
collectionView重用出錯(cuò)的效果圖
- 沒有點(diǎn)擊下面的但是 還是被勾選了 collectionView的重用出現(xiàn)了問題
解決方法
- 使用一個(gè)數(shù)組 flagArr 存儲(chǔ)所有cell的狀態(tài)
- 把indexPath.row 和這個(gè)數(shù)組flagArr 傳入cell中 然后進(jìn)行賦值
- 根據(jù)點(diǎn)擊的cell 進(jìn)行判斷然后給flagArr數(shù)組進(jìn)行數(shù)據(jù)的更新
具體實(shí)現(xiàn)
- -> viewDidLoad中
//初始化flagArr
self.flagArr=[NSMutableArrayarray];
//初始化數(shù)據(jù)源 self.dataArr=[NSMutableArrayarray];
for (int i=0; i<80; i++) {
[self.dataArraddObject:[NSStringstringWithFormat:@"%d",i]];
//把flagArr 的個(gè)數(shù)和數(shù)據(jù)源的個(gè)數(shù)設(shè)置成相同的
//而且用0初始化~也就是一開始 cell的狀態(tài)全都是未選中
[self.flagArraddObject:@"0"];
}
- -> cellForRow或者cellForItem中 (第三問)
//把indexPath.row 和 flagArr傳進(jìn)去
[cell config:indexPath.row andData:self.flagArr];
- ->cell中
-(void)config:(NSInteger)index andData:(NSMutableArray*)flagArr;
{
//給需要點(diǎn)擊cell改變的狀態(tài)的控件設(shè)置tag
//為了能在外面取到 然后通過點(diǎn)擊cell給控件改變狀態(tài)和屬性
self.selectImageView.tag=8888+index;
//賦值判斷:如果在index位置的值為0 就是未被選中 1就是被選中
if ([flagArr[index] intValue]){
self.selectImageView.image=[UIImageimageNamed:@"FriendsSendsPicturesSelectBigYIcon"];
}else {
self.selectImageView.image=[UIImageimageNamed:@"FriendsSendsPicturesSelectBigNIcon"];
}
}
- ->控制器的 didSelected 點(diǎn)擊cell的方法中
//一答:點(diǎn)擊item響應(yīng)的方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
//這個(gè)是關(guān)鍵通過indexPath 拿到這個(gè)cell 這個(gè)方法我老師忘記
UICollectionViewCell * cell =[collectionView cellForItemAtIndexPath:indexPath];
//拿到這個(gè)cell中的控件
UIImageView * selICon=(UIImageView *)[cell viewWithTag:8888+indexPath.row];
//通過indexPath嘶居。row 取到這個(gè)cell的狀態(tài) 0就是未被選中响迂,1就是已經(jīng)被選中了
int cellFlag=[[self.flagArrobjectAtIndex:indexPath.row] intValue];
if (cellFlag) {
[self.flagArrsetObject:@"0"atIndexedSubscript:indexPath.row];
selICon.image=[UIImageimageNamed:@"FriendsSendsPicturesSelectBigNIcon"];
}else {
[self.flagArrsetObject:@"1"atIndexedSubscript:indexPath.row];
selICon.image=[UIImageimageNamed:@"FriendsSendsPicturesSelectBigYIcon"];
}
}
現(xiàn)在你在運(yùn)行的話UICollectionView
或者UITableView
的重用問題就解決了哦~~
參考Demo:GitHub