如何获取tableView中的单元格对象:(UITableView*)tableView heightForRowAtIndexPath函数?

use*_*398 18 iphone objective-c ipad ios

我在返回heightForRowAtIndexPath时知道单元格的内容.在此函数中如何获取单元格对象?

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

}
Run Code Online (Sandbox Code Playgroud)

如果我试试这个

 [tableView cellForRowAtIndexPath:indexPath]
Run Code Online (Sandbox Code Playgroud)

它失败并在无限循环中消失.

任何的想法?

NWC*_*der 26

调用self(委托)而不是tableView本身.

id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)

  • 不推荐这样做的方式.出于某种原因,在cellForRowAtIndexPath之前调用heightForRowAtIndexPath,您应该能够根据您拥有的数据计算高度.除非您确实需要为单元格设置不同的高度,否则也不建议使用heightForRowAtIndexPath,因为随着数据集的大小增加,它会慢得多. (4认同)
  • @Joe:半不同意.如果你可以很容易地计算出需要细胞的高度,那就没关系了.在某些合法的情况下,您需要实例化单元格才能知道它的高度.我有很多自定义单元格类,这些类很复杂,很难计算高度w/o布局子视图.一些Apple示例也是这样做的. (4认同)
  • 看来如果你使用`dequeueReusableCellWithIdentifier:forIndexPath:`重用单元格,`tableView:heightForRowAtIndexPath:`将在启动单元格时调用,你将获得无限递归.所以这种方法在那种情况下不起作用. (4认同)
  • 如果你的cellForRowAtIndexPath使用的是heightForRowAtIndexPath,那么总会有无限递归.如果是这样,你将不得不以不同的方式构建它. (2认同)

onn*_*web 0

我认为你不能也不应该这样做。您需要从 indexPath 确定将在相应单元格中显示哪些数据,从而计算单元格所需的高度。

因此,您需要编写一些代码来从 indexPath 获取数据模型中的正确数据。