UITableView和UICollectionView的cell重用问题
来源:互联网 发布:钢琴软件手机版 编辑:程序博客网 时间:2024/05/16 15:20
APP的一个页面用到了自定义的UITableViewCell,由于iOS框架的cell重用机制,遇到了一个BUG,总结一下
现象
自定义的UITableViewCell里有一个UIButton,点击这个button以后,需要改变cell的样式,包括换UILabel字体颜色,禁用该UIButton等。结果发现,点击按钮之后,不仅当前cell的字体颜色变了,还有另外几个cell的字体颜色也跟着变,而且是随机的
原因
后来想到,应该是由于iOS的cell重用机制造成的,原来的代码类似:
-(void) onButtonPressed{ label.textColor = [UIColor grayColor]; button.enabled = NO;}
其中label和button都是这个cell的实例变量,由于cell是自动重用的,所以其他重用此cell的格子也会跟着一起变
正确的做法
修改之后,正确的做法应该是:
1、在controller中找到此cell对应的模型
2、修改模型对应的值
3、调用tableView的reloadData方法
4、在dataSource的代理方法里,再调用cell上的设置样式的方法
示意代码:
-(void) voteButtonPressed{ [myController voteWithCell:self];}
-(void) voteWithCell:(CandidateTableViewCell*)cell{ RankingView *myView = (RankingView*)self.view; // 找到对应的模型 NSIndexPath *indexPath = [myView.tableView indexPathForCell:cell]; Candidate *candidate = [candidates objectAtIndex:indexPath.row]; // 设置新值 candidate.voteCount++; candidate.isVoted = YES; // 触发数据加载 [myView.tableView reloadData];}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ CandidateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[CandidateTableViewCell reuseIdentifier] forIndexPath:indexPath]; Candidate *candidate = [candidates objectAtIndex:indexPath.row]; [cell setCandidate:candidate isExpired:self.stage != 1 controller:self]; return cell;}
0 0
- UITableView和UICollectionView的cell重用问题
- iOS 关于UICollectionView的cell重用问题
- UITableView cell的重用
- iOS开发-简述UITableView中cell的重用问题
- UITableview 多选 解决cell重用问题
- UITableview 多选 解决cell重用问题
- 解决UITableView中Cell重用机制问题
- iOS UICollectionView 和 UITableView cell更新 详解
- cell的重用问题
- UICollectionView重用机制的问题
- ios UITableView中Cell的重用机制
- UITableView中Cell的重用机制
- ios UITableView中Cell的重用机制
- UITableView-cell 的重用机制
- MainStoryBoard 中UITableView Cell的重用
- UITableView中cell的重用机制
- UITableView的cell复用,UICollectionView的cell复用
- UICollectionView的cell间距问题
- Socket编程实现广播和多播
- volatile的作用
- hadoop学习笔记3 hadoop2.5.2单机模式环境配置和eclipse运行
- SHELL脚本学习指南——背景知识
- shader 入门 《从固定图形管线到可编程流处理器》
- UITableView和UICollectionView的cell重用问题
- 排序算法总结之计数排序 Counting Sort
- 线程的笔记1 wait yield join interrupt deamon 死锁使用方法
- rails render partial 参数 变量说明
- 【转载】J2SE知识点归纳笔记(三)---Java面向对象 Part 2
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
- 《php核心技术与最佳实践》笔记7
- 黑马程序员-Java的基本数据运算
- Objective-C分类 (category)和扩展(Extension)