Sie müssen die Zelle wiederverwenden und das Webview in der Zelle neu laden, wenn Sie die Effizienz und Leistung berücksichtigen, laden Sie einfach die noch nie gespielte, und gleichzeitig die Videodaten oder die HTML-Daten zu lokalen Cache . Auf der anderen Seite können Sie zum Abspielen einer Zelle das Objekt von webview aufzeichnen, diese Webviews direkt in der wiederverwendeten Zelle einrichten.
Pseudo-Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
YourCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
// If the video at this row is playing, just setup webview
UIWebView *webView = [self webviewOfPalyingForIndexPath: indexPath];
if (webView) {
[cell setupWithWebview: webView];
} else {
// Configure cell with reused webview
static UIWebView *publicWebview = [UIWebView new];
[cell setupWithWebview: publicWebview];
// Check if the data of webview is cached
NSData *cachedData = [self readCachedDataForIndexPath: indexPath];
if (cachedData) {
[cell setupWithCachedData:cachedData];
} else { // If not cached, load url and cach the data
[cell setupWithUrl: your_url];
[self cacheDataForUrl: your_url];
}
}
return cell;
}
// Record webview of playing at indexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
YourCell *cell = (YourCell *)[tableView cellForRowAtIndexPath:indexPath];
[self recordPlayingWebView: cell.webview atIndexPath: indexPath];
}
Hoffnung meine Antwort sehr nützlich für Sie ist.
UPDATE:
Pseudo-Code mit Swift:
let reusedWebview = UIWebView()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath)
// If the video at this row is playing, just setup webview
let webView = self.webviewOfPalyingForIndexPath(indexPath)
if (webView != nil) {
cell.setupWithWebview(webView)
} else {
// Configure cell with reused webview
cell.setupWithWebview(resuedWebview)
// Check if the data of webview is cached
let cachedData = self.readCachedDataForIndexPath(indexPath)
if (cachedData != nil) {
cell.setupWithCachedData(cachedData)
} else { // If not cached, load url and cach the data
cell.setupWithUrl(your_url)
self.cacheDataForUrl(your_url)
}
}
return cell;
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
self.recordPlayingWebView(cell.webview, forIndexPath: indexpath)
}
Können Sie zeigen Ihre cellForRowAtIndexPath so dass ich leicht zeigen können, wie Sie Ihr Problem zu beheben. – pnizzle