如何在出局时停止`UITableViewCell`中的`UIWebView`重新加载?

时间:2017-10-19 18:57:22

标签: ios swift uitableview uiwebview

Video of web view reloading after shown on screen

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()

    if indexPath.row == 17 {
        let _cell = tableView.dequeueReusableCell(withIdentifier: "webCell") as! WebviewTableViewCell

        let webView = UIWebView()

        webView.frame = _cell.contentView.bounds
        webView.scalesPageToFit = true

        let webViewURL = "https://www.reddit.com/"
        var _request = URLRequest(url: URL(string: webViewURL)!)
        _request.cachePolicy = .returnCacheDataElseLoad
        webView.loadRequest(_request)

        _cell.contentView.addSubview(webView)

        return _cell
    }

    cell.textLabel?.text = "sample cell \(indexPath.row + 1)"

    return cell
}

我使用上面的代码提供了Web视图的缓存副本。但是,每次具有Web视图的单元格都在屏幕外时,表视图会重新加载Web视图内容。如何在Web视图中仅加载一次页面,而不是每次单元格离开屏幕时加载页面?任何帮助将非常感谢和投票。谢谢。

2 个答案:

答案 0 :(得分:0)

您的代码显示您根本没有使用dequeueReusableCell的缓存功能。 您从缓存(队列)获取单元格,然后向其添加新的Web视图。

解决方案是在WebviewTableViewCell init / storyboard中创建网络视图。

答案 1 :(得分:0)

试试吧

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()

if indexPath.row == 17 {
    let _cell = tableView.dequeueReusableCell(withIdentifier: "webCell") as! WebviewTableViewCell

    If _cell.contentView.viewWithTag(100) == nil 
{
    let webView = UIWebView()
       webView.tag=100;
    webView.frame = _cell.contentView.bounds
    webView.scalesPageToFit = true

    let webViewURL = "https://www.reddit.com/"
    var _request = URLRequest(url: URL(string: webViewURL)!)
    _request.cachePolicy = .returnCacheDataElseLoad
    webView.loadRequest(_request)

    _cell.contentView.addSubview(webView)
}

    return cell;
}

cell.textLabel?.text = "sample cell \(indexPath.row + 1)"

return cell

}