自定义绘制UITableViewCell

时间:2009-07-09 21:58:39

标签: iphone cocoa-touch uitableview

我正在尝试创建一个UITableViewCell,它会覆盖内容的完整绘图。我已经覆盖了正在调用的drawRect,但它仍然绘制了默认内容。

如何让它停止绘制默认内容?如何用自己的渲染替换它?

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    DLog (@"Overloaded TableCell initWithStyle");
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    DLog (@"TableCell::drawRect");

    // expecting it to draw nothing
}

4 个答案:

答案 0 :(得分:9)

Loren Brichter(Tweetie的作者)在iTunes U Stanford iPhone编程课程讲座中谈到了这一点。他说他通过继承UITableViewCell并直接绘制每个单元格的内容得到了很好的滚动性能结果,他在his blog post on the subject中给出了一个代码示例。

他还指出,苹果在其中一个代码示例中添加了a similar example

答案 1 :(得分:3)

Loren Brichter的博客已不再可用。但是,代码移到了这里:

https://github.com/enormego/ABTableViewCell

希望它是一个更永久的URL。

答案 2 :(得分:1)

尝试创建UIView的子类(使用您自己的drawRect)并将其分配给表格单元格contentView

答案 3 :(得分:0)

您是否考虑过使用Interface Builder创建自定义UITableViewCell?

创建你的xib,然后像这样加载它:

static NSString *CellIdentifier = @"Cell";
cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
    cell = [nibContents objectAtIndex:0];
}

// do your customization
return cell;

请注意,实际单元格位于xib中的索引0处。

干杯...