在UITableViewCell中使用UIWebView来显示动态内容

时间:2011-12-14 11:47:08

标签: ios uitableview uiwebview

我需要在表格视图单元格中显示具有不同样式和颜色的不可编辑文本。在研究中,似乎UIWebView是实现我想要的风格/颜色灵活性的方法。这是我做的:(注意iOS 5,XCode 4)

  • 创建了一个从UITableViewCell派生的类WebViewTableViewCell。该类包含一个UIWebView。
  • 在storyboard中,我使用包含UIWebView对象的1个动态单元原型创建了表视图控制器。该单元格类型为WebViewTableViewCell。我在类UIWebView和故事板之间建立了连接。
  • 在表格视图控制器代码中,覆盖“heightForRowAtIndexPath”并使用“sizeThatFits”动态调整单元格高度

当我运行时,所有这些“都有效”,除了单元格不会调整大小以适应Web视图中包含的所有文本。事实上,他们根本没有调整大小;它们是故事板中绘制的高度。以下是一些示例代码:

cellForRowAtIndexPath:

  UITableViewCell *cell = nil;
  WebViewTableViewCell *webCell = (WebViewTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cellid"];
  // Now populate the cell with dynamic data
  NSDictionary *thisData = [self.dynamicData objectAtIndex:indexPath.row];
  NSString *myString= [NSString stringWithFormat:@"%@.  %@",
                          [thisData objectForKey:@"key1"],
                          [thisData objectForKey:@"key2"]];
  [webCell.webView loadHTMLString:myStringbaseURL:nil];
  cell = webCell;
  return cell;

heightForRowAtIndexPath:

    WebViewTableViewCell *webCell = (WebViewTableViewCell *) [self tableView:a_tableView cellForRowAtIndexPath:indexPath];
    // Now that we have the cell, let it determine what its height should be.
    CGFloat rowHeight = 45; // default unless if a problem accessing the cell
    if( webCell )
    {
      CGSize size = [webCell.webView sizeThatFits:CGSizeZero];
      rowHeight = rowHeight < size.height ? size.height : rowHeight;
    }

还有一件事 - 细胞虽然不是正确的高度,但是可以滚动。我想让它们固定高度而不能滚动。

有什么想法吗?

- 约翰

2 个答案:

答案 0 :(得分:0)

要停用滚动功能,您只需设置tableView.scrollEnabled = NO即可。要获得正确的高度,您可以将视图控制器设置为webview delegate,并执行以下操作:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"var height = 0; for (var i=0; i < document.all.length; i++) { document.all[i].height; if (document.all[i].height > height) { height = document.all[i].height; } }"];
    CGFloat height  = [result floatValue];
}

我对大型JavaScript感到抱歉,但我认为它会起作用。但是,如果您支持6之前的iOS版本,我建议您使用支持UILabel的内置NSAttributedString或开源UILabel子类。

答案 1 :(得分:-4)


Here 是自定义表格视图的更好方法。