Search code examples
iosobjective-cuitableviewuibuttoncell

Buttons custom cell


I have a costoum cell with a button. I want to be able to change the button's image when press it. I was trying this but i dont get the desired result.

in cellForRowAtIndexPath:

BOOL isTheObjectThere = [self.favoriteArry containsObject:self.tableData[indexPath.row]];
        if (isTheObjectThere==TRUE) {
            cell.favBtn.hidden = NO;
           [cell.favBtn setImage:[UIImage imageNamed:@"fav_selected.png"] forState:UIControlStateNormal];
            cell.favBtn.tag = indexPath.row;
            [cell.favBtn addTarget:self action:@selector(favoriteBtn:) forControlEvents:UIControlEventTouchUpInside];}
else {
            cell.favBtn.hidden = NO;
            [cell.favBtn setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal];
            cell.favBtn.tag = indexPath.row;
            [cell.favBtn addTarget:self action:@selector(unfavoriteBtn:) forControlEvents:UIControlEventTouchUpInside];  
        }

and :

-(void)favoriteBtn:(UIButton*)sender
{
        if ([cell.favBtn.currentImage isEqual:[UIImage imageNamed:@"fav_selected.png"]]){
        [cell.favBtn setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal];
}

    else  if ([cell.favBtn.currentImage isEqual:[UIImage imageNamed:@"[email protected]"]]){
        [cell.favBtn setImage:[UIImage imageNamed:@"fav_selected.png"] forState:UIControlStateNormal];

    }

Solution

  • should be something like the following:

    in your cellForRow:

    [cell.favButton addTarget:self action:@selector(favButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    

    in your favButtonTapped:

    if ([self.favoriteArray containsObject:indexPath]) {
        [self.favoriteArray removeObject:indexPath];
        // sender setImage...
    } else {
        [self.favoriteArray addObject:indexPath];
        // sender setImage...
    }
    

    good luck :)