我创建了自定义单元格,对于某些单元格,我添加了新的子视图:
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)部分没有运行。如何重置单元格或从中删除自定义视图?
答案 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)];
}