解决UICollectionViewCell/UITableViewCell因重用机制导致的错乱问题
解决UICollectionViewCell/UITableViewCell因重用机制导致的错乱问题
UICollectionView和UITableView在开中用的很多,可以解决很多复杂的布局问题,在设计列表式的页面布局时用到的更多,但有时因为设置不当会出现cell的内容错乱的问题。
就拿我遇到的问题举例:
情景一:
在显示以及选择商品的属性时(商品的属性属于分类属性)每滑动一次页面显示属性的cell位置就会错乱,选择时就会出现选择的index对数组溢出;
情景二:
在某个功能情境下需要展示商城商品品牌并且进行多选,选中的和未选中的要有状态区分,但每次选择后滑动液面就会出现已选择的和页面上的状态不对应出现了错乱的状态。
具体的解决方法:
1.先定义一个可变的的dictionary(NSMutableDictionary)
- (UICollectionViewCell *)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { NSString *identifier = [_cellIdentifierDic objectForKey:[NSString stringWithFormat:@"%@", indexPath]]; if(identifier == nil){ identifier = [NSString stringWithFormat:@"selectedBtn%@", [NSString stringWithFormat:@"%@", indexPath]]; [_cellIdentifierDic setObject:identifier forKey:[NSString stringWithFormat:@"%@",indexPath]]; // 注册Cell(把对cell的注册写在此处) [_collectionView registerClass:[SelectedBtnCell class] forCellWithReuseIdentifier:identifier]; } SelectedBtnCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; if(!cell){ cell = [[[NSBundle mainBundle]loadNibNamed:@"SelectedBtnCell" owner:self options:nil]lastObject]; } //商品规格信息逻辑 }
注:在使用UITableViewCell时同样可以用这样的方法来解决再次不再具体说明:
这样就可以解决上面出现的问题,其实原理也很容易理解如果有更先进的解决方法欢迎来访(http://www.cnblogs.com/Rong-Shengcom/);
感谢您的访问!
若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!