Как перезагрузить только одну ячейку в collectionView? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть collectionView, и у меня есть две проблемы. Во-первых, прокрутка слишком запаздывает. Мой collectionView получает данные от API в URL и выглядит так:

enter image description here

Это мой код:

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if imageUrl.count >= 4 {
            activity.stopAnimating()
            activity.isHidden = true
        }else{
            DispatchQueue.main.async {
                self.myCollectionView.reloadData()
            }
        }

        return imageUrl.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "myViewCell", for: indexPath) as! myViewCell

        if let url = NSURL(string: imageUrl[indexPath.row]){
            if let data = NSData(contentsOf: url as URL){
                cell.carImageView.contentMode = UIViewContentMode.scaleAspectFit
                cell.carImageView.image = UIImage(data: data as Data)
            }
        }

        cell.firstLabel.text = firstLabelArray[indexPath.row]

        if secondLabelArray != []{
            cell.secondLabel.text = secondLabelArray[indexPath.row]
        }

        return cell
    }
}

Вторая проблема, с которой я столкнулся - мне нужно обновить только третью ячейку в моем представлении коллекции. Это моя вторая метка, но когда я пытаюсь использовать myCollectionView.reloadData(), она перезагружает все мои клетки. Мне нужно обновлять третью ячейку каждую секунду.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Коллекция Просмотр запаздывает, потому что вы пытаетесь показать изображения с URL в главном потоке. Покажите некоторые изображения по умолчанию в ячейках, прежде чем загружать изображения из API, а затем обновлять ячейки в главном потоке

0 голосов
/ 02 ноября 2018

Проблема с задержкой в ​​collectionView может заключаться в том, как вы используете NSData, рассмотрите возможность использования Alamofire Image, например:

if imageUrl.count > 0 {
        let eachImage = imageUrl[indexPath.row]
        Alamofire.request(eachImage).responseImage(completionHandler: {(response) in
            print("answer\(response)")
            if let image = response.result.value{
                DispatchQueue.main.async {
                    cell.ImageView.image = image
                }
            }
        })
        }
0 голосов
/ 31 октября 2018

Для загрузки определенной ячейки используйте следующее:

let indexPath = IndexPath(item: 2, section: 0)
collectionView.reloadItems(at: [indexPath])

Вы загружаете изображение в cellForItemAt, Просто убедитесь, что вы не загружаете изображение в основной поток

Вы можете использовать библиотеку для загрузки изображения и кэширования изображения

https://github.com/SDWebImage/SDWebImage

https://github.com/Alamofire/AlamofireImage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...