1

我对如何uitableviewcell重用有点困惑。

所以这是我的原始代码:

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"ProductsViewCell";
  UITableViewCell *cell = 
      [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell =
        [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
        reuseIdentifier:CellIdentifier] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    UIWebView* webView = [[UISynchedWebView alloc] initWithFrame:
                          CGRectMake(0,0, 320, 44)];
    webView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    webView.tag = 1001;
    webView.userInteractionEnabled = NO;
    webView.opaque = NO;
    webView.backgroundColor = [UIColor clearColor];

    [cell addSubview:webView];
  }

  UIWebView* webView = (UIWebView*)[cell viewWithTag:1001];
  UIFont *font = [UIFont fontWithName:@"Arial" size:15.0f];

  NSString *html =
  [NSString stringWithFormat:
   @"<html>\n"
   "<head>\n"
   "</head>\n"
   "<body><div style=\"padding:5px 0px; text-align:center\"><b>test</b></div></body>\n"
   "</html>"];

  [webView loadHTMLString:html
                  baseURL:nil];

  return cell;
}

我有一个如下的 if 条件:

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"ProductsViewCell";
  UITableViewCell *cell = 
      [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell =
        [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
        reuseIdentifier:CellIdentifier] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    UIWebView* webView = [[UISynchedWebView alloc] initWithFrame:
                          CGRectMake(0,0, 320, 44)];
    webView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    webView.tag = 1001;
    webView.userInteractionEnabled = NO;
    webView.opaque = NO;
    webView.backgroundColor = [UIColor clearColor];

    [cell addSubview:webView];
  }

  //some process here to get isHTML...

  if (isHTML) {
    UIWebView* webView = (UIWebView*)[cell viewWithTag:1001];
    UIFont *font = [UIFont fontWithName:@"Arial" size:15.0f];

    NSString *html =
    [NSString stringWithFormat:
    @"<html>\n"
    "<head>\n"
    "</head>\n"
    "<body><div style=\"padding:5px 0px; text-align:center\"><b>test</b></div></body>\n"
    "</html>"];

    [webView loadHTMLString:html
                    baseURL:nil];
  }
  else{
    cell.textLabel.text = @"Not HTML";
  }
  return cell;
}

因为我的内容是动态的,所以我只想加载webviewif 内容html,否则我想将它作为普通文本加载cell UILabel并使用上面的 if 条件,我会得到webview与 cell 的重叠UILabel。我怎样才能实现它?

4

2 回答 2

1

试试这个

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"ProductsViewCell";
  UITableViewCell *cell = 
      [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell =
        [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
        reuseIdentifier:CellIdentifier] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
  }

  //some process here to get isHTML...

  if (isHTML) {
    UIWebView* webView = [[UISynchedWebView alloc] initWithFrame:
                          CGRectMake(0,0, 320, 44)];
    webView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    webView.tag = 1001;
    webView.userInteractionEnabled = NO;
    webView.opaque = NO;
    webView.backgroundColor = [UIColor clearColor];
    [cell addSubview:webView];

    NSString *html =
    [NSString stringWithFormat:
    @"<html>\n"
    "<head>\n"
    "</head>\n"
    "<body><div style=\"padding:5px 0px; text-align:center\"><b>test</b></div></body>\n"
    "</html>"];

    [webView loadHTMLString:html
                    baseURL:nil];
  }
  else{
      UIWebView* webView = (UIWebView*)[cell viewWithTag:1001];
      if(webView)
      {
           [webView removeFromSuperview];
      }
      cell.textLabel.text = @"Not HTML";
  }
  return cell;
}
于 2013-01-10T04:43:06.347 回答
0
UIWebView* webView = (UIWebView*)[cell viewWithTag:1001];
if (isHTML) {
    UIFont *font = [UIFont fontWithName:@"Arial" size:15.0f];
    NSString *html =
    [NSString stringWithFormat:
    @"<html>\n"
    "<head>\n"
    "</head>\n"
    "<body><div style=\"padding:5px 0px; text-align:center\"><b>test</b></div></body>\n"
    "</html>"];

    [webView loadHTMLString:html
                    baseURL:nil];
    webView.hidden = NO;
} else {
    cell.textLabel.text = @"Not HTML";
    webView.hidden = YES;
}
于 2013-01-10T04:41:40.847 回答