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