Cocoa-Touch:如何:使用UIColor clearColor背景自定义UITableViewCell

时间:2009-10-25 17:45:51

标签: iphone objective-c cocoa-touch

我有UITableView个自定义单元格 我有MyTableViewCell : UITableViewCellMyTableViewCellContentView : 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

2 个答案:

答案 0 :(得分:1)

要使背景颜色设置生效,您需要在tableView:willDisplayCell:forRowAtIndexPath中进行设置 - 操作系统不会改变您在此处设置的任何内容。原因是,从tableView:cellForRowAtIndexPath返回后,操作系统会完成一些额外的单元设置。如果可以,请查看Jason Beaver提供的WWDC 09会议101。

答案 1 :(得分:0)

我还没有发现它为什么会发生。但我尝试了不同的策略。我不再重复使用表格单元格,因为我没有那么多单元格。

相反,我在启动时创建了所有单元格,并且在显示它们时实际上提升了性能,因为滚动时不需要额外的设置。