iOS UICollectionView单元格复用的问题

collectionView的复用无疑是一个很牛X的机制,然而,在实际项目中,我们也常常会被这一机制所困扰!近段时间在我的项目中就遇到了两种复用引起的问题(问题已经解决,我就不复现之前的问题了):

1,复用引起的视图重叠问题

我当时的问题是:我在单元格上加了一个视图View1,这个View1是动态的,然而每次滑动的时候都会出现重叠的问题!

我的解决方案是:在setModel里面,当给View1填充内容之前,我先将View1给removeAllSubviews.这样就得到了解决.

2,多组单元格的多选引起的复用问题

问题描述:我需要选择筛选条件,而且是多个筛选类型,因此,这里就需要用到多组,并且点击之后单元格的样式(颜色,文字啥的)要改变,因此就要记录它的选中状态,而当我选择了第一组的的第A个的时候,往下滑动,重新出现的那几组的第A个都会被选中.这样就很尴尬了,我只是想改变那一组啊!我原本用的方式是cell.hasSelected = self.selectedIndex == indexPath.row;点击单元格的时候改变self.selectedIndex,然后刷新点击的那一组,以为这样就可以了?然而复用机制导致的问题依然会出现!!!

解决方案:来一个可变数组,装上你点击的那一组的单元格的indexPath.row,当然会有一个初始值:

[self.selectedArray addObjectsFromArray:@[@"0",@"0",@"0",@"0",@"0",@"0",@"0",@"0"]];

我这里有8个组,因此我存进去的是8个元素,里面的对象就是每一组的选中的那一个,如上的初始,当然是默认每一组选中第一个,这样,在单元格的创建里我是这样做的:

NSString *selectedValue = [self.selectedArray objectAtIndex:indexPath.section];

cell.hasSelected = [selectedValue integerValue] == indexPath.row;

用indexPath.section取到选中的那个元素,然后跟indexPath.row对比,给单元格是否选中赋值(因为你每一组里面应该不会是只有一个单元格的).

那么在点击单元格的事件里面我是这样做的:

[self.selectedArray replaceObjectAtIndex:indexPath.section withObject:[NSString stringWithFormat:@"%ld",indexPath.row]];

[self.collectionView reloadData];

我直接将数组里面你选中的那一组的选中的那一个给替换掉!这样我也不需要单独去更新某一组了,全部去刷新吧!

[当然,以上问题只是我个人在项目中遇到的,不同的情况也会有不同的解决方案,仅供参考,希望对大家有用,同事如果有什么问题也可以发出来大家一起探讨探讨]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容