Если вы собираетесь использовать кнопку в ячейке, я бы предложил использовать шаблон делегирования, чтобы сама ячейка обрабатывала нажатие кнопки и отправляла сообщение в контроллер представления.
В SceneTableViewCell.h
@protocol SceneTableViewCellDelegate <NSObject>
@optional
- (void)checkBoxTapped:(SceneTableViewCell *)cell;
@end
@interface SceneTableViewCell : NSObject
@property (nonatomic, weak) id <SceneTableViewCellDelegate> delegate;
@end
В SceneTableViewCell.m
-(IBAction)checkboxTapped:(UIButton *)sender {
[self.delegate checkBoxTapped:self];
}
В вашем ViewController.m
@property (nonatomic,strong) NSMutableIndexSet *checkedRows;
- (void) viewDidLoad {
self.checkedRows = [[NSMutableIndexSet alloc]init];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"SceneTableViewCell";
SceneTableViewCell *cell = (SceneTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.delegate = self
}
if([self.checkedRows contains:indexPath.row]) {
[cell.btnRadio setBackgroundImage:[UIImage imageNamed:@"checked"] forState:UIControlStateNormal];
} else {
[cell.btnRadio setBackgroundImage:[UIImage imageNamed:@"unchecked"] forState:UIControlStateNormal];
}
cell.lblName.text =[[_arrApplnc valueForKey:@"applianceName"] objectAtIndex:indexPath.row];
return cell;
}
- (void) checkBoxTapped:(SceneTableView Cell *)cell {
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
if ([self.checkedRows contains: indexPath.row]) {
[self.checkedRows removeIndex: indexPath.row];
} else {
[self.checkedRows addIndex: indexPath.row];
}
[tableView reloadRowsAt:@[indexPath], withRowAnimation: UITableViewRowAnimationAutomatic];
}
Другим подходом было бы просто использовать UIImageView
в ячейке, а не UIButton
и использовать обработчик didSelect
для переключения проверенного состояния.Таким образом, пользователь может нажать в любом месте ячейки.