У вас должна быть связь между ячейкой и контроллером табличного представления. Поскольку вы уже создаете свою пользовательскую ячейку в своем контроллере, самый простой способ - использовать шаблон делегата.
@class CustomTableViewCell;
@protocol CustomTableViewCellDelegate
- (void)customTableViewCellDidEnterTextMode:(CustomTableViewCell *)cell;
@end
@protocol (nonatomic, assign) id<CustomTableViewCellDelegate> delegate;
и просто вызовите метод делегата, в котором вы обнаруживаете, когда текстовое поле получает фокус
[self.delegate customTableViewCellDidEnterTextMode:self];
и в контроллере
- (void)customTableViewCellDidEnterTextMode:(CustomTableViewCell *)cell {
self.editingIndexPath = [self.tableView indexPathForCell:cell];
// from Jablair's answer
[tableView beginUpdates];
[tableView endUpdates];
}
А затем в tableView:heightForCellAtIndexPath:
просто верните свой особый рост для self.editingIndexPath
.
Возможно, вам придется включить другой метод делегата, чтобы знать, когда фокус также покидает текстовое поле.
Другим подходом будет использование уведомлений, но это только усложнит ваш код, и, если имеется только один получатель сообщения, делегат является предпочтительным способом. Третий подход заключается в назначении делегата текстового поля вашему контроллеру, а не вашей ячейке.
Суть в том, что вы должны предоставить связь между ячейкой и таблицей, чтобы посмотреть на себя, и я считаю, что использование шаблона делегата - лучший подход.