0

当我在 UItablevewcell 中添加标签时,如果它在单元格的内容视图中为 nil。如果它不是 nil,我将通过标签获取该标签而不分配。这是重用单元格的正确程序。但是当我不想要第二行中的标签时,我必须隐藏它。如何才能在不隐藏的情况下仅删除第二行中的标签。我需要在第一行中使用它。

4

2 回答 2

0

例如,您可以在出列并创建它们时使用不同的单元格标识符。例如@“带标签的单元格”和@“不带标签的单元格”。

或者您可以标记此标签label.tag = MY_INT_TAG并搜索它UILabel *label = [cell viewWithTag:MY_INT_TAG]以将其从第二行的超级视图中删除。当您不想继承 UITableViewCell 时,它可以工作。

if (indexPath.row == 0) {
  UILabel *label = [[UILabel alloc] init];
  label.tag = TAG;
  [cell.contentView addSubview:label];
} else if (indexPath.row == 1) {
  UILabel *label = [cell.contentView viewWithTag:TAG];
  [label removeFromSuperView];
}
于 2012-05-08T11:34:51.770 回答
0

当您重用没有公共元素的单元格时,最佳做法是在重用之前清除单元格子视图(所有添加的元素)。

这样您就可以根据需要每次添加元素...

你可以这样做:

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

或者如果你想更花哨:

    [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

当然,如果您只想清除特定行中的 1 个特定元素,则必须在将元素添加到单元格的内容视图时为其分配一个唯一标签,然后通过其标签值访问它来删除它:

将其添加到单元格中:

UIImageView *rightArrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]];
rightArrow.tag = 111;
rightArrow.frame = CGRectMake(290, 16, 4, 8);
[cell.contentView addSubview:rightArrow];

从第 2 行的视图中删除它:

if (indexpath.row == 2) {
    UIImageView *rightArrow = (UIImageView *)[cell.contentView viewWithTag:111];
    if (rightArrow)
      [rightArrow removeFromSuperView];

}

于 2012-05-08T11:37:08.413 回答