仅删除特定行中的contentview对象?

时间:2012-05-08 11:32:20

标签: iphone ios

当我在UItablevewcell中添加标签时,如果它在cell的contentview中为nil。如果它不是nil, 我通过标签获取该标签而没有allocating.it是重用该单元格的正确程序。 但是当我不想在第二行中使用该标签时,我必须隐藏它。如何才能删除第二行中的标签 没有隐藏。我需要在第一行。

2 个答案:

答案 0 :(得分:0)

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

或者您可以按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];
}

答案 1 :(得分:0)

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

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

你可以这样做:

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

或者如果你想更加喜欢:

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

当然,如果您只想清除特定行中的1个特定元素,那么在将其添加到单元格的contentview时必须为该元素指定唯一标记,然后通过它的标记值访问该元素来删除它: / p>

将其添加到单元格中:

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];

}