在TableView单元格中加载UIWebView

时间:2012-07-12 23:55:29

标签: iphone objective-c ios cocoa-touch uiwebview

在我的桌面视图中,当您滚动单元格时,它们每个都会加载来自Youtube / Vimeo的视频截图/链接......

但是当我第一次开始滚动表视图时,我注意到每个webview都不断重新加载(我的意思是什么?)首先,我会一直滚动到表格视图的底部,让每个表格单元格加载Web视图因此,当我向上滚动到顶部时,我认为webview不需要再次重新加载,但是他们确实...

为了解决这个问题我在下面做了一些事情,但我遇到了另一个问题。当你第一次打开这个场景时,表格视图会正常加载所有可见单元格的webview,但是当你开始向下滚动到其他表格视图单元格时,我注意到它所做的只是我第一次打开场景时加载的最后一个webview并将其放入我向下滚动时遇到的所有其他网页视图中。

我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [[UITableViewCell alloc] init];
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSMutableString *VideoID;
    VideoID = [NSMutableString stringWithFormat:@"9394596"];

    if(indexPath.row == 19) {
        VideoID = [NSMutableString stringWithFormat:@"9820827"];
        NSLog(@"19");
    }
    NSString *htmlStringToLoad = [NSString stringWithFormat:@"http://player.vimeo.com/video/%@?title=0&byline=0&portrait=0\%%22%%20width=\%%22%0.0f\%%22%%20height=\%%22%0.0f\%%22%%20frameborder=\%%230\%%22", VideoID];
    // Configure the cell...


    UIWebView *thisWebView = (UIWebView*)[cell viewWithTag:10];
    NSString *contentsOfWebView = [thisWebView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].innerHTML"];

    UILabel *thisLabel = (UILabel*)[cell viewWithTag:20];

    if([contentsOfWebView length] < 3) {
        [thisWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:htmlStringToLoad]]];
        NSLog(@"IF");
    } else {
        NSLog(@"ELSE");
    }

    thisLabel.text = @"Video Title";
    cell.detailTextLabel.text = @"TEST";

    return cell;
}

如何在表格视图中加载每个网页视图,如果我遇到已加载的网页视图,请不要加载它们?

编辑:第19行应加载不同的视频,但不是

1 个答案:

答案 0 :(得分:0)

因为您正在重复使用表视图单元格,所以其中包含的Web视图已经加载了内容(它将重用现在已经滚动屏幕的任何可用单元格),因此在您的语句中:

if([contentsOfWebView length] < 3)

webview的内容大于3,因此不会重新加载,从而显示现有内容。