У вас должна быть связь между ячейкой и контроллером табличного представления. Поскольку вы уже создаете свою пользовательскую ячейку в своем контроллере, самым простым способом было бы использовать шаблон делегата.
@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
.
Вероятно, вам придется включить еще один метод делегата, чтобы узнать, когда фокус покидает текстовое поле.
Другим подходом было бы использование уведомлений, но это только усложнит ваш код, и если есть только один получатель сообщения, делегат является предпочтительным способом. Третий подход заключается в том, чтобы установить делегат текстового поля на ваш контроллер, а не на вашу ячейку.
Суть в том, что вам нужно предоставить ссылку между представлением ячейки и таблицы самостоятельно, и я считаю, что использование шаблона делегата - лучший подход.
person
Robert Höglund
schedule
03.12.2010