UITableViewCell遇到的重用问题的解决
UITableViewCell在运用在重视出现一些内容重叠,数据覆盖等问题的解决
1.之前看到有推荐让cell进行不重用是可以解决问题,为每一个cell指定不同的重用标识符来解决,使得cell不能重用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = [NSString stringWithFormat:@"cell%d%d", [indexPath section], [indexPath row]];//以indexPath来唯一确定cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; //出列可重用的cell
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}//...其他代码}
这样做内存空间浪费极大,而且如果有删除时再reload后,你会发现删除的cell是最后一个cell,因为cellIdentifier = [NSString stringWithFormat:@"cell%d%d", indexPath.section, indexPath.row]的原因。(不推荐使用)
2.使用系统原生cell时 在为cell添加控件时需要注意重用问题
在if (cell==nil) {
//创建cell
//创建控件
//为控件添加tag(使cell在复用时可以取到cell上对应的控件)
}
根据tag为控件赋值(避免控件上内容的重复)
3.使用系统原生cell时 在为cell添加控件时需要注意重用问题
if (cell==nil) {
//创建cell
}
//创建控件
这种情况下,每次复用cell的时候就会重新创建一个控件,出现控件重叠的情况 我们可以将之前添加的控件移除
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
4.使用xib创建cell时出现重用问题解决很简单
- (void)prepareForReuse{
[super prepareForReuse];
}
将cell上的控件内容置空