UITableviewCell没有清理数据?

时间:2016-05-03 09:30:50

标签: ios objective-c uitableview

Hello Guys正在iOS App中工作,我正在UITableview上显示用户数据。对于第一个用户,它的工作正常,但当我点击UIbutton并希望显示下一个用户数据UITableviewCell不清除以前的用户数据时,即使在显示之前为每个标签分配空字符串下一个用户数据。我的代码在这里

 static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    UILabel *headLablel,*textLabel,*subLabel,*sharedActLbl;

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

    }


    headLablel=[[UILabel alloc]init];
    headLablel.tag=11;
    [cell.contentView addSubview:headLablel];
    textLabel=[[UILabel alloc]init];
    textLabel.tag=12;
    [cell.contentView addSubview:textLabel];
    subLabel=[[UILabel alloc]init];
    subLabel.tag=13;
    [cell.contentView addSubview:subLabel];

任何帮助将不胜感激。感谢

3 个答案:

答案 0 :(得分:2)

每次单元格出列时,您都会添加新的子视图(headLableltextLabelsubLabel)。这是错误的,因为当您调用dequeueReusableCellWithIdentifier方法时,它会返回已显示的单元格。因此,您反复添加新的子视图,这就是旧数据保留的原因。

我建议你继承UITableViewCell

如果您不想要,可以修改您的代码:

for (UIView *subview in cell.contentView.subviews)
{
    [subview removeFromSuperview];
}

headLablel=[[UILabel alloc]init];
headLablel.tag=11;
[cell.contentView addSubview:headLablel];
textLabel=[[UILabel alloc]init];
textLabel.tag=12;
[cell.contentView addSubview:textLabel];
subLabel=[[UILabel alloc]init];
subLabel.tag=13;
[cell.contentView addSubview:subLabel];

这样效率很低,因为每次都会创建新标签。

答案 1 :(得分:0)

您还可以在initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier中创建自定义单元格类时添加子视图 如果要生成具有不同子视图的单元格,还可以设置不同的单元格样式,这样,当tableView重用单元格时,它可以提高应用程序的性能。当tableView使单元格出列时可能会导致意外问题。

快乐编程!

答案 2 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     static NSString * MyIdentifier = @" MyIdentifier&#34 ;;     UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if(cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
else{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
[cell.contentView clearsContextBeforeDrawing];

在Cell中创建UITableViewCell代码的代码替换为我的代码并检查它的工作..我已经使用mannual release如果你不是那么发布自动释放它的括号..