如何在 TableViewCell 中为 collectionView 异步下载图像?
Posted
技术标签:
【中文标题】如何在 TableViewCell 中为 collectionView 异步下载图像?【英文标题】:How to download images async for collectionView inside TableViewCell? 【发布时间】:2017-03-18 23:58:06 【问题描述】:我在 tableViewCell 内做了一个网格(collectionView),问题是每个单元格加载不同的图像。像这样制作一个 Json:
"name": "Vegetales"
"images": imagesURLStrings
,
"name": "Frutas"
"images": imagesURLStrings
,
我使用this page 自定义视图并使用this other 进行异步下载。
我认为问题在于,当我尝试为 tableviewCell 中的 collectionView 定义单元格数量时,分配错误,无法正常工作,而且我不知道如何修复。
图片下载代码:
func loadImages()
var section = 0
var row = 0
while (section < searchDataresults.count)
for i in searchDataresults[section].images
let key = section * 10 + row
let imageUrl = i
let url:URL! = URL(string: imageUrl)
task = session.downloadTask(with: url, completionHandler: (location, response, error) -> Void in
if let data = try? Data(contentsOf: url)
// 4
DispatchQueue.main.async(execute: () -> Void in
// 5
// Before we assign the image, check whether the current cell is visible
let img:UIImage! = UIImage(data: data)
saveImage(image: img, name: String(key))
)
)
task.resume()
row += 1
section += 1
row = 0
代码是我将图像放在collectionView上,记住它在tableViewCell中,所以单元格的数量必须根据json的images.count来改变。
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return searchDataresults[cellLoad].images.count
internal func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellImage", for: indexPath as IndexPath)
let key = cellLoad * 10 + indexPath.row
if let img = loadImage(name: String(key))
let imageView = UIImageView(image: img)
imageView.frame = cell.frame
imageView.bounds = cell.bounds
imageView.center = cell.center
cell.contentView.addSubview(imageView)
print(key)
else
let imageView = UIImageView(image: UIImage(named: "emptyImg"))
imageView.frame = cell.frame
imageView.bounds = cell.bounds
imageView.center = cell.center
cell.contentView.addSubview(imageView)
return cell
非常感谢您的帮助!
【问题讨论】:
你可以使用图片查看扩展***.com/a/27712427/2303865 已经做了,但是没用:'(@LeoDabus 【参考方案1】:继承 UICollectionviewCell 并重置集合视图单元格的内容
override func prepareForReuse()
super.prepareForReuse()
self.customImageview.image = nil
【讨论】:
以上是关于如何在 TableViewCell 中为 collectionView 异步下载图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中为 SpriteKit 定义类别位掩码枚举?
如何使用情节提要在 Tableview Cell 中为 2 个标签和一个图像视图设置约束?
如何在单个 TableViewcell 的不同部分有不同的图像,将集合视图放置在 tableviewCell 内