UITableViewCell在绘制之前不会清除上下文

时间:2010-02-10 15:42:19

标签: iphone objective-c uitableview

我有一个UITableViewCell的子类,它包含几个元素--UIImageViews,Labels等。
由于此单元格可以重复使用,因此我希望能够根据当前显示的数据更改它的外观。

举个例子 - 我在自定义UITableViewCell中有这个视图:

UIImageView* delimeterView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellDelimiter.png"]];

我希望有时能隐藏起来:

- (void) setRecord:(id)record__ {  
    if (record__.type == NO_DELIMETER_VIEW)  
        delimeterView.hidden = YES;  
    else  
        delimeterView.hidden = NO;
    [self setNeedsLayout];   
} 

但问题是delimeterView将始终显示在单元格上,就像在init方法中绘制一次,然后从未更改或清除绘图上下文。我已经尝试将clearsContextBeforeDrawing属性设置为YES以用于单元格及其contentView,我也尝试将单元格设置为opaque,并将其contentView设置为NO,因为我读过可能存在一些问题,以防您使用透明观点。
什么都没有帮助 看起来UITableViewCell从不清除其图形上下文,只是描绘旧元素 关于我做错什么的任何提示? 我知道我可以通过自定义绘图解决这个问题,但我宁愿不这样做。

1 个答案:

答案 0 :(得分:1)

首先,您确定delimeterView中的setRecord:实际指向您的delimeterView吗?在您给出的代码示例中,您将其分配给本地。你以后把它分配给ivar吗? (您应该始终使用访问器来访问ivars:self.delimeterView)。

接下来,调用-setNeedsLayout只会安排对-layoutIfNeeded的调用,该调用会遍历调用-layoutSubviews的层次结构。 -layoutSubviews的默认实现不执行任何操作。您可能打算在此处致电-setNeedsDisplay,或者您需要实施-layoutSubviews来做您想做的事。