我有UITableView
个自定义单元格
我有MyTableViewCell : UITableViewCell
和MyTableViewCellContentView : UIView
个类。
我正在做的基本上是在AdvancedTableViewCells demo app from Apple中做了一点点改动,在某些行上我想使用clearColor背景来显示绘制文本背后的表背景。
所以在MyTableView
的{{1}}我正在做的事情:
cellForRowAtIndexPath
在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.someValue = indexPath.section;
[cell finishedSetup];
return cell;
}
的{{1}}:
MyTableViewCell
finishedSetup
中的 和我实现了cellContentView = [[MyTableViewCellContentView alloc] initWithFrame:CGRectMake(0, 0, 320, 80) cell:self];
cellContentView.autoresizingMask = UIViewAutoresizingNone;
cellContentView.contentMode = UIViewContentModeRedraw;
[self.contentView addSubview:cellContentView];
方法。并计划不使用任何子视图,但绘制我的自定义内容就像Apple示例在MyTableViewCellContentView
中所做的那样。
问题是,对于一些部分,我想使用drawRect
CompositeSubviewBasedApplication
。这是有效的,直到具有非clearColor
backgroundColor
的单元格被重复用于绘制clearColor
单元格,此时背景不会被清除并且仍然具有旧颜色。“ p>
如何重新绘制背景?
修改的:
我忘了提到,我在调用super的init之后在backgroundColor
的init中设置了背景颜色。通过以下方式设置:
clearColor
我已经确认这实际上已被调用,并且使用clearColor或redColor按预期调用。
我也尝试过设置表格单元格的背景颜色,但没有帮助。
编辑#2 :这是我的drawRect方法:
MyTableViewCellContentView
答案 0 :(得分:1)
要使背景颜色设置生效,您需要在tableView:willDisplayCell:forRowAtIndexPath
中进行设置 - 操作系统不会改变您在此处设置的任何内容。原因是,从tableView:cellForRowAtIndexPath
返回后,操作系统会完成一些额外的单元设置。如果可以,请查看Jason Beaver提供的WWDC 09会议101。
答案 1 :(得分:0)
我还没有发现它为什么会发生。但我尝试了不同的策略。我不再重复使用表格单元格,因为我没有那么多单元格。
相反,我在启动时创建了所有单元格,并且在显示它们时实际上提升了性能,因为滚动时不需要额外的设置。