Определить делегат в классе, связанном с прототипом Cell.
// MyCell.h
@protocol MyCellDelegate
- (void)buttonTappedOnCell:(MyCell *)cell;
@end
@interface MyCell : UITableViewCell
@property (nonatomic, weak) id <MyCellDelegate> delegate;
@end
// MyCell.m
@implementation MyCell
- (void)buttonTapped:(id)sender {
[self.delegate buttonTappedOnCell:self];
}
}
@end
Теперь переходим к классу вы хотите сделать делегат ячейки. Вероятно, это будет подкласс UITableView. В методе cellForRowAtIndexPath убедитесь, что вы назначили делегата Ячейки себе. Затем реализуем метод, указанный в протоколе.
- (void)buttonTappedOnCell:(MyCell *)cell {
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
int row = indexPath.row;
}
Или, если вы предпочитаете блоки на основе подхода:
// MyCell.h
typdef void(^CellButtonTappedBlock)(MyCell *cell);
@interface MyCell : UITableViewCell
@property (nonatomic, copy) CellButtonTappedBlock buttonTappedBlock;
@end
Тогда в DataSource вашей Tableview в:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = ....
__weak typeof(self) weakSelf = self;
[cell setButtonTappedBlock:^(MyCell *cell) {
NSIndexPath *indexPath = [weakSelf.tableView indexPathForCell:cell];
// Do stuff with the indexPath
}];
}
Спасибо. Этот ответ был очень полезен. –
Но как мы можем передать раздел тоже? –
@ShreeshGarg Я обновил свой ответ надлежащим образом, это должно быть сделано. – jamone