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

Posted

技术标签:

【中文标题】如何在 tableView:(UITableView *)tableView heightForRowAtIndexPath 函数中获取单元格对象?【英文标题】:How to get the cell object in tableView:(UITableView *)tableView heightForRowAtIndexPath function? 【发布时间】:2011-04-12 17:39:46 【问题描述】:

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

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


如果我试试这个

 [tableView cellForRowAtIndexPath:indexPath]

它失败并陷入无限循环。

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

【讨论】:

如果你的 cellForRowAtIndexPath 使用 heightForRowAtIndexPath 那么总会有无限递归。如果是这样,您将不得不以不同的方式构建它。 不推荐这样做。出于某种原因,在 cellForRowAtIndexPath 之前调用了 heightForRowAtIndexPath,您应该能够根据您拥有的数据计算高度。也不建议使用 heightForRowAtIndexPath ,除非您确实需要为单元格设置不同的高度,因为随着数据集大小的增加,它会慢得多。 @Joe:半不同意。如果您可以在不需要单元格的情况下轻松计算高度,那很好。在某些合理的情况下,您需要实例化单元以了解其高度。我有许多足够复杂的自定义单元格类,以至于在不布置子视图的情况下计算高度很困难。一些 Apple 示例也是这样做的。 看来如果你使用dequeueReusableCellWithIdentifier:forIndexPath:重用cell,在初始化cell的时候会调用tableView:heightForRowAtIndexPath:,你会得到一个无限递归。所以这种情况下这个方法是行不通的。 对我有用,但是当您尝试在表格视图中添加新单元格时,您会感觉到它对性能造成的损害。同样不建议访问heightForRowAtIndexPath中的单元格【参考方案2】:

使用UITableView中的func dequeueReusableCellWithIdentifier(identifier: String) -> AnyObject?不要使用func dequeueReusableCellWithIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath) -> AnyObject可能原因heightForRowAtIndexPathcellForRowAtIndexPath 之前被调用,并且此方法使用索引路径根据单元格在表格视图中的位置执行附加配置。但是因为还没有单元格,所以我认为它进入了无限循环。

【讨论】:

【参考方案3】:

调用heightForRowAtIndexPath: 时尚未创建单元格,因此无法“获取”单元格。相反,请查看您的模型并以这种方式确定单元格的高度。

如果您担心字符串较长并且单元格中需要更多垂直空间,请考虑使用sizeWithFont:forWidth:lineBreakMode:。文档在这里:https://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html

【讨论】:

【参考方案4】:

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

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

【讨论】:

这是错误的,在这种情况下您可以发送tableView:cellForRowWithIndexPath。 @user... 只是将其发送到错误的对象。【参考方案5】:
uitableviewcell *ce=[self.view viewwithtag:indexPath.row]; 

它返回单元格对象。

【讨论】:

只有在使用此标签创建单元格时才有效。另请注意,重用单元格可能会出现问题,因为在您查找时它们可能已出列。

以上是关于如何在 tableView:(UITableView *)tableView heightForRowAtIndexPath 函数中获取单元格对象?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 tableview 单元格中显示解析的 imageView

代码中创建的视图与Autolayout的交互

Tableview 单元格字幕未显示或应用程序退出

错误:在 swift 中使用 xib 文件注册自定义 tableView 单元格

iOS - TableView willDisplayCell 动画仅在用户向下滚动而不是顶部时发生

在 tableViewCell 中添加 Webview