Несколько мыслей:
Вы можете выполнять итерацию по иерархии суперпредставления кнопки, пока не найдете UITableViewCell, затем вызвать - (NSIndexPath *) indexPathForCell: (UITableViewCell *) в UITableView.
- (void)buttonClicked:(id)sender {
UIView *button = sender;
for (UIView *parent = [button superview]; parent != nil; parent = [parent superview]) {
if ([parent isKindOfClass: [UITableViewCell class]]) {
UITableViewCell *cell = (UITableViewCell *) parent;
NSIndexPath *path = [self.tableView indexPathForCell: cell];
// now use the index path
break; // for
}
}
}
Вы можете поочередно использовать тег кнопки для хранения индекса, ссылающегося на строку. Он содержит только одно целое число, поэтому он наиболее целесообразен, когда у вас есть один раздел или когда вы управляете строками в виде плоского списка.
Вы можете поочередно создавать подкласс UITableViewCell для инкапсуляции кнопки. Ваш UITableViewCell может отвечать на события кнопки и ретранслировать событие своему делегату, передавая себя. Затем делегат события может вызвать - (NSIndexPath *) indexPathForCell: (UITableViewCell *) ячейку в UITableView, чтобы получить путь индекса.