无法从tableview custome cell中删除子视图

时间:2016-08-11 12:36:16

标签: uitableview custom-cell

当表格滚动时,它将在单元格上重复subview,我在代码下面使用tableview custome单元格显示嵌入式视图。任何人都知道,请帮助我。如何解决这个问题。

long tag = 100 + indexPath.row;
URLEmbeddedView *embeddedView = [custom.contentView viewWithTag:tag];

if ([custom.contentView viewWithTag:tag]) {
    [embeddedView loadURL:@"" completion:nil];
    [embeddedView removeFromSuperview];
}

embeddedView = [[URLEmbeddedView alloc] initWithFrame:CGRectMake(35, 60, 220, 110)];
//URLEmbeddedView *embeddedView = [[URLEmbeddedView alloc] initWithFrame:CGRectMake(custom.img_bgOther.frame.origin.x + 35, custom.img_bgOther.frame.origin.y + 50, 220, 110)];

embeddedView.tag = tag;
[custom.contentView addSubview:embeddedView];
[embeddedView loadURL:str_Website completion:nil];

1 个答案:

答案 0 :(得分:0)

您的问题中的代码可能来自您的cellForRowAtIndexPath:方法。您描述的问题是细胞被重复使用的结果。滚动屏幕的行的单元格将重复用于在屏幕上滚动的行。假设第0行在屏幕上滚动。它将具有标记为 100 的嵌入式视图。并假设它被重用于第10行。上面的代码将尝试查找带有 110 标记的视图,并将其从超级视图中删除。由于标记不匹配,因此不会删除现有的嵌入视图,并且会在其上添加新的嵌入视图。

我建议你做不同的事情。您不应该在cellForRowAtIndexPath中添加和删除嵌入视图。您有一个自定义单元格,因此只需将嵌入视图设计到其中即可。在自定义单元格类中创建URLEmbeddedView属性,这样您就可以访问该子视图而无需使用viewWithTag。您可以使用该属性使用当前行的正确值调用loadURL:completion:方法。

当重复使用单元格时,tableView将调用单元格的prepareForReuse方法。因此,在自定义单元格类中重写该方法,并在此时清除loadURL / completion。