iOS DeveloperiOS 开发

UITableViewCell遇到的重用问题的解决

2016-06-16  本文已影响810人  别叫我超人

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上的控件内容置空

上一篇下一篇

猜你喜欢

热点阅读