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)trialSummaryTableViewCell
从tableView: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];