2011-12-14 2 views
0

테이블 뷰 셀에 다른 스타일과 색상으로 편집 할 수없는 텍스트를 표시해야합니다. 연구하면서, UIWebView는 내가 원하는 스타일/색상 유연성을 얻는 방법 인 것 같습니다. 여기에 내가 한 일이있다. (참고 : iOS 5, Xcode 4)UITableViewCell에서 UIWebView를 사용하여 동적 내용 표시

  • UITableViewCell에서 파생 된 WebViewTableViewCell 클래스가 만들어졌다. 클래스에는 UIWebView가 포함되어 있습니다.
  • 스토리 보드에서 UIWebView 개체가 포함 된 동적 셀 프로토 타입 1 개가있는 테이블보기 컨트롤러를 만들었습니다. 셀의 유형은 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에 더 나은 aproach입니다.

+0

왜이 기능을 사용하지 않았습니까? –

0

스크롤을 사용 중지하려면 tableView.scrollEnabled = NO을 설정하면됩니다. 정확한 높이를 얻으려면 당신이 웹보기 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]; 
} 

나는 큰 자바 스크립트에 대한 미안하지만 나는 그것이 작동 것이라 생각합니다. 그러나 UILabel이 (가) NSAttributedString을 지원하며, 아니면 오픈 소스 UILabel 하위 클래스를 사용하는 것이 좋습니다.

관련 문제