我有一个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从不清除其图形上下文,只是描绘旧元素
关于我做错什么的任何提示?
我知道我可以通过自定义绘图解决这个问题,但我宁愿不这样做。
答案 0 :(得分:1)
首先,您确定delimeterView
中的setRecord:
实际指向您的delimeterView
吗?在您给出的代码示例中,您将其分配给本地。你以后把它分配给ivar吗? (您应该始终使用访问器来访问ivars:self.delimeterView)。
接下来,调用-setNeedsLayout
只会安排对-layoutIfNeeded
的调用,该调用会遍历调用-layoutSubviews
的层次结构。 -layoutSubviews
的默认实现不执行任何操作。您可能打算在此处致电-setNeedsDisplay
,或者您需要实施-layoutSubviews
来做您想做的事。