当表格滚动时,它将在单元格上重复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];
答案 0 :(得分:0)
您的问题中的代码可能来自您的cellForRowAtIndexPath:
方法。您描述的问题是细胞被重复使用的结果。滚动屏幕的行的单元格将重复用于在屏幕上滚动的行。假设第0行在屏幕上滚动。它将具有标记为 100 的嵌入式视图。并假设它被重用于第10行。上面的代码将尝试查找带有 110 标记的视图,并将其从超级视图中删除。由于标记不匹配,因此不会删除现有的嵌入视图,并且会在其上添加新的嵌入视图。
我建议你做不同的事情。您不应该在cellForRowAtIndexPath
中添加和删除嵌入视图。您有一个自定义单元格,因此只需将嵌入视图设计到其中即可。在自定义单元格类中创建URLEmbeddedView
属性,这样您就可以访问该子视图而无需使用viewWithTag
。您可以使用该属性使用当前行的正确值调用loadURL:completion:
方法。
当重复使用单元格时,tableView将调用单元格的prepareForReuse
方法。因此,在自定义单元格类中重写该方法,并在此时清除loadURL / completion。