Использование UIWebView в UITableViewCell для отображения динамического содержимого - PullRequest
0 голосов
/ 14 декабря 2011

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

  • Создан класс 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;
    }

Еще одна вещь - клетки, хотя и не правильной высоты, прокручиваются. Я хочу сделать их фиксированной высоты, а не прокручиваться.

Есть мысли?

- Джон

Ответы [ 2 ]

0 голосов
/ 03 июля 2013

Чтобы отключить прокрутку, вы можете просто установить 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.

0 голосов
/ 16 декабря 2011


Здесь - лучший подход к пользовательскому виду таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...