Запишите метод действия в контроллере представления, который является источником данных табличного представления, например:
-(IBAction)reloadCell:(id)theCell {
NSIndexPath *idxPath = [theTableView indexPathForCell:theCell];
[theTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:idxPath, nil]
withRowAnimation:YES]; // or NO ;)
}
Затем в методе -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
перед возвратом ячейки настройте его следующим образом:
// ...
[cell.theButton addTarget:self
action:@selector(reloadCell:)
forControlEvents:UIControlEventTouchUpInside];
return cell;
Это вызовет метод -(IBAction)reloadCell:(id)sender;
, вызываемый при касании кнопки и перезагрузке конкретной ячейки, но это решение, возможно, заставит вас переместить код, который обновляет содержимое списка, поскольку я не знаюкакое из сообщений будет отправлено первым (то, которое обновляет содержимое, или то, которое перезагружает ячейку).
Так что, я думаю, лучший способ для вашего подкласса пользовательских кнопок иметь слабую ссылку наконтроллер, поэтому кнопка может обновить содержимое, а затем отправить сообщение контроллеру, и работает на основе того же метода действия в контроллере.
В подклассе вашей кнопки .h
YourControllerType *tableController;
@property(assign) YourControllerType *tableController;
В вашей кнопке подкласс .m
@synthesize tableController
// in the method where you update the list
[tableController reloadCell:self.superview];
Также не забудьте правильно настроить ячейку
// ...
cell.theButton.tableController = self;
return cell;