Подход, которым вы придерживаетесь, может привести к сбою или утечке памяти, поскольку вам нужно сохранить контроллер содержимого ячейки uitableview.
Однако протоколы - это простой подход, когда после создания ячейки табличного представления выМожно выделить viewcontroller (который создает табличное представление) в качестве делегата для всех действий для представления содержимого ячейки.
В контроллере вашей пользовательской ячейки просто вызовите метод делегата, и он будет обработан вашим родительским представлением.Это может показаться странным, но это действительно просто.Попробуем опубликовать пример кода.
@protocol yourDelegate;
@interface yourViewController{
id<yourDelegate> delegate;
}
@property (nonatomic,assign) id<yourDelegate> delegate;
@end
@protocol yourDelegate
- (void)passThisActionToMainController;
- (void)passThisEventToMainController;
@end
Как только вы закончите с вышеуказанным в вашем контроллере представления ячеек таблицы, в главном контроллере создайте экземпляр вашего контроллера представления и затем
controller.delegate = self;
В контроллере представления вашей ячейки, когда пользователь касается или выполняет какое-либо действие, затем вызовите
[delegate passThisActionToMainController];
или
[delegate passThisEventToMainController];
Таким образом, ваш главный контроллер получает событие, и оно может быть обработано.
Альтернативный способ сделать это - создать кнопки при создании ячейки и обработке событий.Я бы рекомендовал этот подход.
[myButton addTarget:self action:@selector(whatMyButtonShouldDo:)
forControlEvents:UIControlEventTouchUpInside];
Приведенная выше строка скопирована из ответа здесь .