Делегаты - это то, что нужно.
Как видно из других ответов, использование представлений может устареть. Кто знает, завтра может появиться еще одна обертка и, возможно, потребуется ее использовать cell superview]superview]superview]superview]
. И если вы используете теги, вы получите n условий if else для идентификации ячейки. Чтобы избежать всего этого, настройте делегатов. (Таким образом вы создадите повторно используемый класс ячейки. Вы можете использовать тот же класс ячейки, что и базовый класс, и все, что вам нужно сделать, это реализовать методы делегата.)
Сначала нам нужен интерфейс (протокол), который будет использоваться ячейкой для передачи (делегирования) нажатий кнопок. ( Вы можете создать отдельный файл .h для протокола и включить его как в контроллер табличного представления, так и в пользовательские классы ячеек ИЛИ просто добавить его в пользовательский класс ячеек, который в любом случае будет включен в контроллер табличного представления )
@protocol CellDelegate <NSObject>
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data;
@end
Включите этот протокол в настраиваемый контроллер ячеек и таблиц. И убедитесь, что контроллер табличного представления подтверждает этот протокол.
В настраиваемой ячейке создайте два свойства:
@property (weak, nonatomic) id<CellDelegate>delegate;
@property (assign, nonatomic) NSInteger cellIndex;
В UIButton
делегате IBAction щелкните: ( То же самое можно сделать для любого действия в пользовательском классе ячейки, которое необходимо делегировать обратно для просмотра контроллера )
- (IBAction)buttonClicked:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnCellAtIndex:withData:)]) {
[self.delegate didClickOnCellAtIndex:_cellIndex withData:@"any other cell data/property"];
}
}
В контроллере табличного представления cellForRowAtIndexPath
после удаления ячейки установите указанные выше свойства.
cell.delegate = self;
cell.cellIndex = indexPath.row;
И реализуем делегат в контроллере табличного представления:
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}
Это был бы идеальный подход для получения настраиваемых действий кнопок ячейки в контроллере табличного представления.