如何在iOS中重置tableViewCell的内容?

时间:2014-04-11 04:44:44

标签: ios objective-c uitableview

我创建了自定义单元格,对于某些单元格,我添加了新的子视图:

  static NSString *cellIdentifierCell = @"Cell";

FeedCell *cell = (FeedCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifierCell];
if (!cell)
{
    cell = [[FeedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierCell]; //frame
}

 //here add subView

     if (wallPost.attachmentLinks[@"audio"])
{
    NSLog(@"%ld",(long)indexPath.row);
    [cell addAudio:wallPost.attachmentLinks[@"audio"] fromStartFrame:CGRectMake(10, 50 + collectionHeight + 5 + 90 + 5, 300, 20)];
   } else {
    for (UIView *v in cell.subviews)    //// (1)
    {
        if (v.tag == 333)
        {
            [v removeFromSuperview];
        }
    }
}

这是我使用的单元格方法:

 - (void)addAudio:(NSArray *)arrayAudio fromStartFrame:(CGRect)frame
{
for (NSDictionary *dic in arrayAudio)
 {
    UIView *audioView = [[UIView alloc]init];
    audioView.frame = CGRectMake(10, frame.origin.y-100, 300, 20);
    audioView.backgroundColor = [UIColor yellowColor];
    audioView.tag = 333;
    [self addSubview:audioView];

}
[self layoutSubviews];
 }

问题是我必须在没有它的单元格中有子视图。第(1)部分没有运行。如何重置单元格或从中删除自定义视图?

2 个答案:

答案 0 :(得分:1)

如果您创建两个单元格视图会更好。它不是使用标记删除视图的最佳方法。在代码的else部分,只需使用将视为空视图的备用视图。它可能是处理这种情况的另一种方法。

答案 1 :(得分:0)

在添加新视图之前,应始终删除旧视图。所以代码看起来应该是这样的

for (UIView *v in cell.subviews)    //// (1)
{
    if (v.tag == 333)
        [v removeFromSuperview];
}

if (wallPost.attachmentLinks[@"audio"])
{
    NSLog(@"%ld",(long)indexPath.row);
    [cell addAudio:wallPost.attachmentLinks[@"audio"] fromStartFrame:CGRectMake(10, 50 + collectionHeight + 5 + 90 + 5, 300, 20)];
}