tableView:indexPathForCell返回nil

时间:2011-08-03 16:42:10

标签: iphone uitableview uiwebview protocols

我使用方法tableView:indexPathForCell来实现自定义委托,该委托可以根据UITableViewCell内部的UIWebView的帧大小动态调整tableView:indexPathForCell的大小。问题是当我试图找出特定单元格的indexPath是什么时nil正在返回- (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}}

3 个答案:

答案 0 :(得分:122)

此刻可能是细胞不可见。 tableView:indexPathForCell在这种情况下返回nil。我使用indexPathForRowAtPoint解决了这个问题,即使单元格不可见,此方法也能正常工作。代码:

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

答案 1 :(得分:13)

如果单元格不可见,则

[tableV indexPathForCell:cell]返回nil。

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

答案 2 :(得分:4)

一个小小的更新,因为Jorge Perez的答案将从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];