2011-12-14 3 views
0

Мне нужно отобразить не редактируемый текст с разными стилями и цветами в ячейках таблицы. При исследовании, похоже, что UIWebView - это способ достижения гибкости стиля/цвета, который я хочу. Вот что я сделал: (примечание iOS 5, XCode 4)Использование UIWebView в UITableViewCell для отображения динамического содержимого

  • Создал класс WebViewTableViewCell, полученный из UITableViewCell. Класс содержит 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

Почему это было приостановлено? –

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, но я думаю, что он будет работать. Тем не менее, я рекомендую использовать встроенный в UILabel, который поддерживает NSAttributedString, или подклассом с открытым исходным кодом UILabel, если вы поддерживаете версии iOS до 6.

Смежные вопросы