views:

1998

answers:

3

I am trying to create a UITableViewCell which overrides the complete drawing of the contents. I have overridden drawRect, which is being called, but it still draws the default contents.

How do I get it to stop drawing the default contents and how do I replace it with my own rendering?

- (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
}
A: 

Try creating a subclass of UIView (with your own drawRect) and assign it to the table cell's contentView instead.

Ramin
+1  A: 

Have you considered using Interface Builder to create your custom UITableViewCell?

Create your xib and then load it like this:

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;

Note that the actual cell is at index 0 in the xib.

Cheers...

nicktmro
+5  A: 

Loren Brichter (author of Tweetie) talked about this in one of the iTunes U Stanford iPhone Programming course lectures. He said that he had gotten great scrolling performance results by subclassing UITableViewCell and drawing the contents of each cell directly and he gives a code example in his blog post on the subject.

He also notes that apple has added a similar example in one of their code examples.

Prairiedogg
this is also always covered a ton at WWDC, if you can get the session videos.
Michael Grinich