View Full Version : UITableViewCell and UIButton issue

Apr 3, 2009, 04:58 AM
I have a custom UITableViewCell and in there except from other elements i want to draw two buttons which once either pressed the one animates a transformation on the button and the other changes picture(actual actions dont matter that much).What happens is that except for the cell in which the button was pressed i see the effect in other cells too.
Also if i use an animation i see the transformed button drawn behind the normal one..one on top of the other
to be more precise heres a sample of my code:

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";
AnswerView * cell = (AnswerView *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIButton * thumbsUp;
if(cell == nil)
cell = [[[AnswerView alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
button= [[[UIButton alloc] initWithFrame:CGRectMake(x, y, w,
button.tag = 2;
[button addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];
button = (UIButton *)[cell.contentView viewWithTag:2];

if(/* some logic involving indexPath.row */)
[button setFrame: ]
[button setFrame:

[cell.contentView addSubView:button];
return cell;

Is this a completely the wrong way to go ?

Apr 3, 2009, 05:10 AM
Since you have subclassed the cell, why don't you stick the buttons and all the cell layout into your AnswerView class? That way, you'll just be adding and removing AnswerView cell objects rather than keeping the buttons and cells seperately.

At the moment, I think you are running into problems when the cells are reused and you may also have a memory leak, which is why the buttons are building up on top of each other.

Apr 6, 2009, 05:11 AM
thnks for the reply...
i noticed a pattern in how the button is wrongly drawn in other cells and its every other 2 cells.Does this has to do with how the cells are reused?

Apr 6, 2009, 09:55 AM
You need to addSubview the button inside the block of code where you create the cell and button. Your code is adding the subview every time, which isn't correct when reusing the cell.