如何清除 UITableViewCells 中的 UILabel?

Posted

技术标签:

【中文标题】如何清除 UITableViewCells 中的 UILabel?【英文标题】:How to clear UILabels inside UITableViewCells? 【发布时间】:2011-04-07 05:02:29 【问题描述】:

我在 UITableView 的每个单元格中放置了多个 UILabel,而不是单个 cell.textLabel.text。然后我使用 reloaddata 来放置新的 uilabels。如何摆脱旧标签?

编辑:如果我在一个单元格中放置 5 个标签,然后仅使用 2 个标签重新加载该单元格,则从我上次调用 cellForRowAtIndexPath 时还剩下 3 个标签。 如果我像 Goldeen 所说的那样使用 viewWithTag,我可以重复使用旧标签,但我可以从内存中删除我不想要的标签吗?

编辑: 这是我的方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath static NSString *CellIdentifier = @"Cell";

MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
    cell = [[[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];


UILabel *label =  [[[UILabel alloc] initWithFrame:CGRectMake(j*50.0, 0, 49.0,logicTable.rowHeight)] autorelease];
label.tag = 1;
label.text = [NSString stringWithFormat:@"ABC"];
label.textAlignment = UITextAlignmentCenter; 
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
UIViewAutoresizingFlexibleHeight;

[cell.contentView addSubview:label];

return cell; 

【问题讨论】:

你的问题不清楚。需要更多解释。 【参考方案1】:

听起来你正在做的是,在你的 cellForRowAtIndexPath 方法中,你正在设置你的 UITableViewCells,其中包含一些标签,并且每次你都是从头开始制作标签。您应该做的是,如果您正在制作一个新单元格,则设置标签,然后在此之外设置标签上的值,以充分利用重用表格视图单元格的能力来提高滚动表格视图的性能。

关键方法是-viewWithTag:,与 UIView 上的tag 属性一起,您可以使用它来查找特定的子视图。

一些示例代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"MyCellIdentifier";

    UITableViewCell *cell = (WHArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UILabel *firstLabel = nil;
    UILabel *secondLabel = nil;
    UILabel *thirdLabel = nil;
    if (cell == nil) 
    
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        firstLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0.0, 0.0, 20.0, 20.0)] autorelease];
        firstLabel.tag = 1;
        [cell addSubview:firstLabel];

        secondLabel = [[[UILabel alloc] initWithFrame: CGRectMake(20.0, 0.0, 20.0, 20.0)] autorelease];
        secondLabel.tag = 2;
        [cell addSubview:secondLabel];

        thirdLabel = [[[UILabel alloc] initWithFrame: CGRectMake(40.0, 0.0, 20.0, 20.0)] autorelease];
        thirdLabel.tag = 3;
        [cell addSubview:thirdLabel];
        
    else
    
        firstLabel = (UILabel *)[cell viewWithTag:1];
        secondLabel = (UILabel *)[cell viewWithTag:2];
        thirdLabel = (UILabel *)[cell viewWithTag:3];
    
    firstLabel.text = @"First Label's Text Here";
    secondLabel.text = @"Second Label's Text Here";
    thirdLabel.text = @"Third Label's Text Here";
    return cell;

【讨论】:

谢谢。我想一旦我从 cellForRowAtIndexPath 出来,标签就会永远丢失。我试试这个

以上是关于如何清除 UITableViewCells 中的 UILabel?的主要内容,如果未能解决你的问题,请参考以下文章

一个NIB中的几个自定义UITableViewCells - 如何在代码中引用?

如何从 UITableView 中的 UITableViewCells 中的 UITextFields 中获取文本并将它们放入数组中(Swift 3)?

动态 UITableView 高度与 UIScrollView 中的动态 UITableViewCells

如何创建具有复杂内容的 UITableViewCells 以保持滚动流畅

UITableViewCells 中的 UITextFields - 当单元格消失时,文本会消失

为啥我的 Storyboard 中的静态原型 UITableViewCells 显示为空白?