我有一个应用程序他们我从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)
}
}
我会用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
}
在开始回答之前,我希望你有一个通过继承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
}
我强烈推荐这个库,因为如果你尝试使用扩展手动完成它,你需要考虑许多可能性,比如缓存图像,动态加载另一个线程中的图像,内存管理等等。这个库中处理得非常好。