如何在 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 定义类别位掩码枚举?

Laravel 集合计数结果

如何使用情节提要在 Tableview Cell 中为 2 个标签和一个图像视图设置约束?

如何在单个 TableViewcell 的不同部分有不同的图像,将集合视图放置在 tableviewCell 内

MVVMCross iOS如何在TableViewCell按钮中传递参数

如何在 tableviewcell 中获取 indexpath uitextfield?