tableView:indexPathForCell返回nil

我正在使用tableView:indexPathForCell方法来实现一个自定义的委托,可以dynamic调整UITableViewCell的大小,基于它的UIWebView的帧大小。 问题是,当我试图找出一个特定单元格的indexPath是什么时, tableView:indexPathForCell返回nil

 - (void)trialSummaryTableViewCell:(TrialSummaryTableViewCell *)cell shouldAssignHeight:(CGFloat)newHeight { NSIndexPath *indexPath = [tableV indexPathForCell:cell]; NSLog(@"tableV: %@\ncell: %@\nindexPath: %@", tableV, cell, indexPath); //<-- // ... } 

这里, tableV不返回nil ,cell不返回nil ,但indexPath返回nil

我究竟做错了什么?

编辑:我打电话-(void)trialSummaryTableViewCelltableView:cellForRowAtIndexPath:方法

这可能是目前这个单元格不可见。 tableView:indexPathForCell在这种情况下返回nil。 我解决了这个使用indexPathForRowAtPoint这个方法工作,即使单元格不可见。 代码:

 UITableViewCell *cell = textField.superview.superview; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center]; 

如果单元格不可见,[tableV indexPathForCell:cell]返回nil。

另外,如果您从“cellForRowAtIndexPath”方法调用“trialSummaryTableViewCell”,则可以轻松地将indexPath传递给“trialSummaryTableViewCell”方法。

一个小的更新,因为豪尔赫佩雷斯的答案将失败从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];