如何清除 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 以保持滚动流畅