передача данных из модели в collectionViewCell - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть несколько пользовательских ячеек, которые применяются с помощью этого метода

 switch indexPath.row {
        case 1:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "randomCell", for: indexPath)
                as? randomCollectionViewCell


        case 2:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeCell", for: indexPath)
                as? timeCollectionViewCell

        case 3:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ownerCell", for: indexPath)
                as? ownerCollectionViewCell

default:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath)
                as? imageModelCollectionViewCell

        }
        return cell
    }

Все ячейки отображаются одновременно и последовательно.Последней ячейкой в ​​функции по умолчанию является imageView, который мне нужен для передачи значения из модели.

Модель создает изображение в виде ссылки, поэтому вам также необходимо загрузить изображение.

Например, этот код как

cell.Image Model.image = ... 

выдает ошибку

Value of type 'UICollectionViewCell?'has no member 'modelimage'

Это код из collectionViewCell для того, что мне нужно для передачи данных

import UIKit

class imageModelCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var modelImage: UIImageView!

}

Как передавать данные из модели в ячейку?

// update

Я обновляю свой код на Saleh Altahini post

Спасибо, я пытаюсь реализовать второй метод,

я использую var imageModelCell: imageModelCollectionViewCell?

и использую метод

DispatchQueue.main.async {
                                            self.collectionView.reloadData()

imageModelCell!.modelImage = UIImage(data: data) as imageModelCollectionViewCell }

и имею ошибку

Cannot convert value of type 'UIImage?' to type 'imageModelCollectionViewCell' in coercion

1 Ответ

0 голосов
/ 17 февраля 2019

Ошибка, которую вы получаете, означает, что ваша ячейка не понижена до imageModelCollectionViewCell.Может быть, вы не правильно ссылаетесь на ячейку?

В любом случае, вы можете настроить ячейку двумя способами.Первый способ - настроить ячейку в функции cellForItemAt следующим образом:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! imageModelCollectionViewCell
    cell.modelImage.image = //Your Image
    return cell
}

Или вы можете ссылаться на свою ячейку в начале и настроить ее позже из любого другого места.Просто добавьте переменную типа var imageModelCell: imageModelCollectionViewCell в UICollectionViewDataSource и передайте ячейку в cellForItemAt следующим образом:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! imageModelCollectionViewCell
    self.imageModelCell = cell
    return cell
}

, затем вы можете просто использовать imageModelCell.modelImage = //Your Image из любой другой функцииили обратный вызов

Дополнительное замечание: рекомендуется начинать имя классов с заглавной буквы, а переменные с маленькой буквы, чтобы вы могли лучше различать, что вы называете или на что ссылаетесь, с помощью Xcode.Возможно, стоит подумать об изменении имени вашего класса на ImageModelCollectionViewCell .

...