Detecting which UIButton was pressed in a UITableView Detecting which UIButton was pressed in a UITableView ios ios

Detecting which UIButton was pressed in a UITableView


In Apple's Accessory sample the following method is used:

[button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

Then in touch handler touch coordinate retrieved and index path is calculated from that coordinate:

- (void)checkButtonTapped:(id)sender{    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];    if (indexPath != nil)    {     ...    }}


I found the method of using the superview's superview to obtain a reference to the cell's indexPath worked perfectly. Thanks to iphonedevbook.com (macnsmith) for the tip link text

-(void)buttonPressed:(id)sender { UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview]; NSIndexPath *clickedButtonPath = [self.tableView indexPathForCell:clickedCell];...}


Here's how I do it. Simple and concise:

- (IBAction)buttonTappedAction:(id)sender{    CGPoint buttonPosition = [sender convertPoint:CGPointZero                                           toView:self.tableView];    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];    ...}