1

在我的表格视图中,当您滚动浏览单元格时,它们会分别加载来自 Youtube/Vimeo 的视频截图/链接...

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

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

我的代码:

- (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;
}

如何在表格视图中加载每个 webview,如果遇到已经加载的 webview,不要加载它们?

编辑:第 19 行应该加载不同的视频,但它没有

4

1 回答 1

0

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

if([contentsOfWebView length] < 3)

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

于 2012-07-13T00:22:53.257 回答