UITableViewCell滚动时继续更改其图像

时间:2018-10-02 09:28:30

标签: swift uitableview

当我滚动表格视图时,tableViewCell的图像保持更改不正确的图像。

我尝试过这个。

@IBOutlet weak var imageView: UIImageView!

override prepareForReuse() {
    super.prepareForReuse()

    self.imageView.image = nil
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? MyCustomCell else { return UITableViewCell() }
    cell.tag = indexPath.row
    if cell.tag == indexPath.row {
        // download image
        downloadManager.download { (image) in
            cell.imageView.image = image
        }
    }
}

但是,滚动时此图像仍然不正确。 我该如何解决?

3 个答案:

答案 0 :(得分:1)

您可以设置一个占位符图像来解决此问题。请使用https://github.com/onevcat/Kingfisher进行异步图片加载

if let url = URL(string: "url_of_your_image") {
    imageView.kf.setImage(with: url)
}

这里是工作代码,可以使用显示 placeholder 图像从URL 下载加载图像,以使用 NSCache < / strong>。

https://stackoverflow.com/a/51746517/10150796

答案 1 :(得分:0)

一旦下载了图片(异步),您需要检查您的单元格确实与该图片相关。

例如单元可能会被其他indexPath重用,因此下载的图像不再正确。

我已经添加了index(indexPath.row)来下载完成闭包,因此您可以检查cell.tag是否等于index

downloadManager.download(index: indexPath.row) { (image, index) in
    if cell.tag == index {
    cell.imageView.image = image
    }
}

答案 2 :(得分:0)

尝试一下:

import UIKit

class CustomViewCell: UITableViewCell {

@IBOutlet weak var imageView: UIImageView!

private var task: URLSessionDataTask?

override func prepareForReuse() {
    super.prepareForReuse()
    task?.cancel()
    imageView.image = nil
}

func configureWith(url string: String) {
    guard let url = URL(string: string) else { return }

    task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        if let data = data, let image = UIImage(data: data) {
            DispatchQueue.main.async {
                self.imageView.image = image
            }
        }
    }
    task?.resume()
 }
}