TableView: indexPathForCell возвращает nil
Я использую метод tableView:indexPathForCell
для реализации пользовательского делегата, который может динамически изменять размер UITableViewCell
на основе размера фрейма UIWebView
, который внутри него. Проблема в том, что tableView:indexPathForCell
возвращает nil
, когда я пытаюсь выяснить, что такое indexPath конкретной ячейки:
- (void)trialSummaryTableViewCell:(TrialSummaryTableViewCell *)cell shouldAssignHeight:(CGFloat)newHeight {
NSIndexPath *indexPath = [tableV indexPathForCell:cell];
NSLog(@"tableV: %@\ncell: %@\nindexPath: %@", tableV, cell, indexPath); //<--
// ...
}
Здесь tableV
не возвращает nil
, ячейка не возвращает nil
, но indexPath
возвращает nil
.
Что я делаю неправильно?
Изменить: я вызываю -(void)trialSummaryTableViewCell
из метода tableView:cellForRowAtIndexPath:
Ответы
Ответ 1
Возможно, клетка в данный момент не видна. tableView: indexPathForCell возвращает нуль в этой ситуации. Я решил это с помощью indexPathForRowAtPoint, этот метод работает, даже если ячейка не видна. Код:
UITableViewCell *cell = textField.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center];
Ответ 2
[tableV indexPathForCell: cell] возвращает nil, если ячейка не видна.
Также, если вы вызываете "trialSummaryTableViewCell" из метода cellForRowAtIndexPath, вы можете легко передать indexPath также методу "trialSummaryTableViewCell".
Ответ 3
Небольшое обновление, так как ответ Хорхе Переса не запускается с iOS7 (так как UIScrollView
был вставлен, а вызов textField.superview.superview
больше не будет работать).
Вы можете получить NSIndexPath
следующим образом:
//find the UITableViewCell superview
UIView *cell = textField;
while (cell && ![cell isKindOfClass:[UITableViewCell class]])
cell = cell.superview;
//use the UITableViewCell superview to get the NSIndexPath
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center];