我使用方法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:
方法
答案 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];