2011-12-14 64 views
0

我需要在表格視圖單元格中顯示具有不同樣式和顏色的不可編輯文本。在研究中,似乎UIWebView是實現我想要的樣式/顏色靈活性的方法。這裏是我做的:(注意iOS 5,XCode 4)在UITableViewCell中使用UIWebView來顯示動態內容

  • 創建一個從UITableViewCell派生的類WebViewTableViewCell。該類包含一個UIWebView。
  • 在故事板中,我使用1個包含UIWebView對象的動態單元格原型創建了表視圖控制器。該單元格的類型爲WebViewTableViewCell。我在類UIWebView和故事板之間建立了連接。
  • 在表格視圖控制器代碼,推翻「heightForRowAtIndexPath」和用於「sizeThatFits」動態調整單元高度

當運行,所有這些「作品」的,不同的是細胞不調整大小以適合網頁視圖中包含的所有文本。事實上,他們根本沒有調整大小;它們是故事板中繪製的高度。下面是一些示例代碼:

的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; 
    } 

一兩件事 - 的細胞,但不正確的高度,是滾動的。我想讓他們固定的高度,而不是滾動。

有什麼想法?

--John

回答

-4


Here是一個更好的形式給出定製的tableview。

+0

爲什麼會降低此選項? – 2012-01-07 20:26:55

0

要禁用滾動,您可以設置tableView.scrollEnabled = NO。爲了得到正確的高度,你可以設置你的視圖控制器作爲web視圖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抱歉,但我認爲它會奏效。但是,如果您支持iOS版本6之前的版本,我建議您使用內置UILabel,支持NSAttributedString或開放源代碼UILabel子類。