我的UITableViewCell
包含UIView
(让我们称之为CPView
),这是在调用cellForRowAtIndexPath
时创建的。 CPView
只是一个纯色视图,每个单元格的宽度都不同(这就是为什么需要在cellForRowAtIndexPath
中创建)。
问题是
1)每次单元格加载时CPView
的颜色会变暗(可能是由于每次单元格创建相同的视图,因此重叠效果)。
2)细胞重叠/继承其他细胞的CPView
(我们可以看到这是因为两个CPView
的浅色和深色)。
如果单元格已经存在或再次创建此CPView
,如何阻止单元格重新创建?
修改
- (void)configureCell:(CreditDebitCell *)cell atIndexPath:(NSIndexPath *)indexPath {
//other code
UIView * CPView;
if (CPView){
CPView =nil;
}
else
{
CPView = [[UIView alloc] initWithFrame:CGRectMake(cell.bounds.origin.x, cell.bounds.origin.y, cell.frame.size.width*[self.percentArray[indexPath.row] floatValue] ,cell.frame.size.height )];
[CPView setClipsToBounds:YES];
[CPView setBackgroundColor:[UIColor colorWithRed:107/255.0 green:15/255.0 blue:47/255.0 alpha:0.5]];
[cell addSubview: CPView];
}
}
答案 0 :(得分:1)
这里的问题是重复使用单元格 - 因此您可以在单元格视图中添加多个视图。
你可以:
- 删除子视图 - 检查子视图是否存在并且不做任何事情。
您可以通过浏览子视图来检查子视图是否存在:
for (UIView *v in cell.contentView.subview) {
if ([v isKindOfClass:[CPView class]]) {
// remove or flag that it exists
}
}
但我认为您应该在您的单元格中处理此问题 - 而不是实现表视图委托的视图控制器。最好告诉单元格使用某些视图/基于某种逻辑隐藏一些视图然后在cellForRowAtIndexPath
答案 1 :(得分:0)
根据您的question(without cellforRowAtIndexpath)
,我可以假设您每次都应该在cellForRowAtIndexPath
if(cpView){
cpView = nil;
}
// alloc again with required size for particular row.
答案 2 :(得分:0)
制作UITableViewCell
的子类,并创建一个引用CPView
的属性。现在,您可以更好地控制子类化单元格是否具有需要添加的任何CPView
。