Custom UITableViewCell won't redraw on setNeedsDisplay

Posted by Andrew Portner on Stack Overflow See other posts from Stack Overflow or by Andrew Portner
Published on 2010-05-19T22:46:33Z Indexed on 2010/05/19 22:50 UTC
Read the original article Hit count: 660

I created a custom UITableViewCell class with a UIButton, a UIImage, and two UILabels. The button and the image are overlayed on top of each other, and only one is displayed at a time. The expected behavior is you touch on the button, the button disappears, and it displays the image. The UITableViewCells are set to be reused. Here's my code:

Constructor:

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

if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { unheartButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];

unheartButton.backgroundColor = [UIColor clearColor]; unheartButton.frame = CGRectMake(10, 13, 20, 18);

[unheartButton addTarget:self action:@selector(onButtonClick:) forControlEvents:UIControlEventTouchUpInside]; [unheartButton setBackgroundImage:[UIImage imageNamed:@"redheart.png"] forState:UIControlStateNormal];

imageView = [[UIImageView alloc] init]; imageView.frame = CGRectMake(12, 13, 16, 16);

NSMutableArray *array = [[NSMutableArray alloc] init];

for (int ndx = 1; ndx < 13; ndx++) { [array addObject:[UIImage imageNamed:[NSString stringWithFormat:@"icon-loading-%d (dragged).tiff", ndx]]]; }

imageView.animationImages = array; imageView.animationDuration = 1; imageView.hidden = YES; [array release];

[self.contentView addSubview:imageView]; [self.contentView addSubview:unheartButton];

return self; } }

Button click:

- (IBAction) onButtonClick: (id) sender {

unheartButton.hidden = YES; imageView.hidden = NO; [imageView startAnimating];

[self setNeedsDisplay]; [self.contentView setNeedsDisplay]; [self.unheartButton setNeedsDisplay]; [self.imageView setNeedsDisplay]; }

I'm calling setNeedsDisplay on everything, but nothing seems to happen. If I scroll off the screen and back up, the button is hidden and now the loading icon is shown, but this only happens after a scroll. I'm not sure what I need to do to get the cell to repaint.

© Stack Overflow or respective owner

Related posts about cocoa-touch

Related posts about iphone