three20表视图与自定义单元格(具有不同的高度)问题

时间:2011-08-14 04:39:35

标签: iphone three20

我有一个表设置,显示来自Web的一些JSON数据。我在不同单元格中表示的数据中有不同类型的元素。基本上,我没有为每个单元格类型创建子类,但我宁愿在setObject / layoutSubviews / rowHeightForObject / etc方法中执行switch / case语句。现在我的问题是某些单元格包含一个UILabel,它根据文本的大小而变化。我现在所做的是,每次在rowHeightForObject方法中创建一个标签并计算它的大小,以确定该特定单元格的高度。有没有更有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用TTStyledTextTableCell单元格。在TTTwitter示例项目中有一个很好的例子。 TTStyledTextTableCell接受带TTStyledText的单元格项,并自动调整单元格的高度。

如果您使用的是自定义单元格类,则必须在单元格类中添加高度函数,并使用TTStyledText代替UILabel

///////////////////////////////////////////////////////////////////////////////////////////////////
+ (CGFloat)tableView:(UITableView*)tableView rowHeightForObject:(id)object {
  TTStyledText* text = object;
  if (!text.font) {
    text.font = TTSTYLEVAR(font);
  }
  text.width = tableView.width - [tableView tableCellMargin]*2;
  return text.height;
}

该函数计算表数据源中每个单元格的TTStyledText类的高度。