2017-03-18 18 views
2

tableViewCell内でグリッド(collectionView)を実行しましたが、問題はセルごとに異なる画像をロードしています。このようにJSONを行いますTableViewCell内でcollectionViewの画像を非同期でダウンロードするには?

{ 
    { 
    "name": "Vegetales" 
    "images": { imagesURLStrings } 
    }, 
    { 
    "name": "Frutas" 
    "images": { imagesURLStrings } 
    }, 
} 

私は非同期のダウンロードを行うために、カスタムのビューやthis otherthis pageを使用しています。

私は、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 
    } 

} 

}

そしてコードは、私はそれがtableViewCell内であることを思い出して、collectionViewに画像を入れていたので、細胞の量がする必要はあり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 
} 

本当にありがとうございます。

+0

http://stackoverflow.com/a/27712427/2303865 –

+0

はすでにそれをやったのではなく、仕事: '(@LeoDabus – AnaMM

答えて

1

あなたは画像表示拡張機能を使用することができ、サブクラスUICollectionviewCellとあなたのコレクションビューのセルの内容をリセット

override func prepareForReuse() { 
super.prepareForReuse() 
self.customImageview.image = nil 

} 
関連する問題