我有带有静态分组单元格的 UITableViewController
。在特定 View 中,我想删除一些单元格。如果我只是隐藏它们,它会留下一个空白空间,所以我想将单元格的 rowHeight
设置为 0
。我在执行此操作时遇到了麻烦,因为我似乎无法获取要隐藏的单元格的 indexPath。我通过 IB 连接引用了它。仔细阅读后,似乎最好的方法是通过 heightForRowAtIndexPath
方法。这是我的代码:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *myIndexPath = [self.tableView indexPathForRowAtPoint:self.billToPostalCell.center];
//crashes here
if ([indexPath isEqual:myIndexPath]) {
return 0;
}
return 44;
}
在此之前,我正在尝试 IndexPathForCell
,但也会崩溃。根据我的阅读,即使单元格不可见,heightForRowAtIndexPath
也应该有效。当它崩溃时,调试器中也没有任何显示。
最佳答案
你正在做的是导致无限递归导致...等等...堆栈溢出!
在 heightForRowAtIndexPath:
方法中,您不能向表格询问单元格或向 indexPath 询问行,因为这些方法需要知道单元格的高度。所以这些调用导致 heightForRowAtIndexPath:
被调用。由于您随后再次调用相同的违规方法,因此这种情况一直持续到事情变得火爆为止。
由于您的目标是隐藏单元格,因此您应该使用正确的 UITableView
方法 (deleteRowsAtIndexPaths:withRowAnimation:
) 从表格中删除单元格。当然,您需要先更新数据模型(以删除行)。
关于ios - IndexPathForCell 和 IndexPathForRowAtPoint 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157798/