Как добавить изображения в collectionView в swift - PullRequest
0 голосов
/ 08 октября 2019

У меня есть просмотр коллекции с изображениями ..

если я даю изображение-заполнитель в sd_setImage, тогда я получаю это изображение в виде коллекции, в противном случае оно становится нулевым в виде коллекции почему ?? отлично, я получаю все изображения в cellForItemAt, тогда почему я не могу отобразить его на экране коллекционного просмотра.

, где я допустил ошибку в своем коде. Пожалуйста, помогите мне в моем коде.

вот мой код:

 import UIKit
 import SDWebImage 

 struct JsonData {
   var iconHome: String?
   var typeName: String?
   init(icon: String, tpe: String) {
     self.iconHome = icon
     self.typeName = tpe
   }
}

class HomeViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UITextFieldDelegate {

  @IBOutlet weak var collectionView: UICollectionView!

  var itemsArray = [JsonData]()

  override func viewDidLoad() {
    super.viewDidLoad()

    homeServiceCall()
  }

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return itemsArray.count
  }

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! HomeCollectionViewCell

    let aData = itemsArray[indexPath.row]
    cell.paymentLabel.text = aData.typeName
    cell.paymentImage.sd_setImage(with: URL(string:aData.iconHome!), placeholderImage: UIImage(named: "home_icon"))

    print("tableview collection images \(String(describing: aData.iconHome))")
    return cell
  }

//MARK:- Service-call

  func homeServiceCall(){

    let urlStr = "https://com/webservices/getfinancer"
    let url = URL(string: urlStr)
    URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in

       guard let respData = data else {
          return
       }
       guard error == nil else {
          print("error")
          return
       }
       do{
          let jsonObj = try JSONSerialization.jsonObject(with: respData, options: .allowFragments) as! [String: Any]
          //print("the home json is \(jsonObj)")
          let financerArray = jsonObj["financer"] as! [[String: Any]]
          print("home financerData \(financerArray)")

          for financer in financerArray {

             let id = financer["id"] as? String
             let pic = financer["icon"] as? String
             let typeName = financer["tpe"] as! String

             print("the icons \(String(describing: pic))")
             self.itemsArray.append(JsonData(icon: pic ?? "", tpe: typeName))
          }

          DispatchQueue.main.async {
             self.collectionView.reloadData()
          }
     }
     catch {
        print("catch error")
     }

  }).resume()
 }
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Я бы посоветовал вам использовать Лотти , чтобы сэкономить вам множество строк кодов

0 голосов
/ 08 октября 2019
  1. Проверьте, не равен ли ноль при загрузке изображения в cellForItemAt
  2. Проверьте, не возвращает ли SDWebImage ошибку
        sd_setImage(with: URL(string:aData.iconHome!)) { (_, error, _, _) in
            if let error = error {
                print(error)
            }
        }
В общем, попытайтесь переместить конфигурацию ячейки внутрь HomeCollectionViewCell и не забудьте добавить
    override func prepareForReuse() {
        super.prepareForReuse()
        reviewerImage.sd_cancelCurrentImageLoad()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...