Делегати - це шлях.
Як видно з інших відповідей, використання поглядів може застаріти. Хто знає завтра, може бути ще одна обгортка і може знадобитися cell superview]superview]superview]superview]
. І якщо ви використовуєте теги, ви отримаєте n число, якщо б інакше умови для ідентифікації комірки. Щоб уникнути всього цього, створіть делегатів. (Тим самим ви будете створювати повторно використовуваний клас комірок. Ви можете використовувати той самий клас комірок, що і базовий клас, і все, що вам потрібно зробити, це реалізувати делегатні методи.)
Спочатку нам потрібен інтерфейс (протокол), який буде використовуватися коміркою для зв'язку (делегування) натискань кнопки. ( Ви можете створити окремий .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; // Set indexpath if its a grouped table.
І реалізуйте делегат в контролері подання таблиці:
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
// Do additional actions as required.
NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}
Це був би ідеальний підхід для отримання власних кнопок дій у контролері подання таблиці.