Swift将图像从Core数据获取到Table View

问题描述 投票:0回答:2

我有一个应用程序他们我从Api(JSON)收到一些图像。我将图像的URL保存为我的核心数据字符串。现在我有一个TableViewController,我想在标签旁边的tableviewcontroller上将这些图像显示为副标题。

我怎样才能获得这些图片?我有一个UIImage扩展,我可以通过网址下载这些图像。但我现在不知道如何将这些内容纳入我的tableview。

extension UIImageView {
    func downloadedFrom(url: URL, contentMode mode: UIViewContentMode = .scaleAspectFit) {
        contentMode = mode
        URLSession.shared.dataTask(with: url) { data, response, error in
            guard
                let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
                let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
                let data = data, error == nil,
                let image = UIImage(data: data)
                else { return }
            DispatchQueue.main.async() {
                self.image = image
            }
            }.resume()
    }
   func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleAspectFit) {
        guard let url = URL(string: link) else { return }
        downloadedFrom(url: url, contentMode: mode)
    }
}
ios swift
2个回答
3
投票

我会用SDWebImage

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableCellName
   cell.imageView?.sd_setImage(with: URL(string:"YourUrl"), placeholderImage: UIImage(named: "placeholder.png"))
   return cell
}

0
投票

在开始回答之前,我希望你有一个通过继承UITableViewCell定义的自定义单元格,其中包含一个UIImageView。如果没有,you should do it first

SDWebImage是这类工作最受欢迎的图书馆。如果您可以使用第三方库继续使用它并使用它。以下是Cell的示例代码,您可以通过网络显示ImageView。

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
           let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! DeliveryCell

          //make url from the string by extrating the url from Core Data entity
           let imageUrl = URL(string: imageUrlString)!

          //set it on a UIImageView with SDWebImage
           cell.deliveryImageView.sd_setImage(with: imageUrl, placeholderImage: UIImage(named: "profile"), options: .refreshCached, completed: nil)

           return cell
    }

我强烈推荐这个库,因为如果你尝试使用扩展手动完成它,你需要考虑许多可能性,比如缓存图像,动态加载另一个线程中的图像,内存管理等等。这个库中处理得非常好。

这是一个详细的tutorial which explains the process

© www.soinside.com 2019 - 2024. All rights reserved.