I have a table, I have cellForRowAtIndexPath delegate for it and I have instance of UITableViewCell being created inside that method, which I return. Somewhere in cellForRow
The trick is to add UIButton as a subview onto UIImageView.
Create UIImage
UIImage backgroundImg = [UIImage imageName:@"yourimg"];
UIImageView imageView = [UIImageView alloc]initWithImage:backgrounding];
Now create the button
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
// set the frame. the position of the button is the center
CGRect newIconRect = CGRectMake(imageView.center.x, imageView.center.y, 29, 29);
button.frame = newIconRect;
Finally add the button onto UIImageView
[imageView addSubview:button];
[cell addSubview imageView];
Now you dont have to play with the highlight color.