Невозможно получить доступ к переменным ячейки collectionView, используя глобальную переменную - PullRequest
0 голосов
/ 26 ноября 2018

Здесь я сделал переменную ячейки collectionView для доступа к обоим объектам.Но невозможно получить доступ к объектам внутри переменной ячейки

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    var cell: UICollectionViewCell!
    if collectionView == collectionView1 {
        cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellAttachment", for: indexPath) as! AttachmentCell
        cell.imgAttachment.image = imageArray1[indexPath.row]
        cell.delegate = self
    }
    else if collectionView == collectionView2 {
       cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellAttachmentView", for: indexPath) as! AttachmentViewCell
       cell.imgFileIcon.image = imgArray2[indexPath.row].fileIcon
    }
    return cell

Значение типа 'UICollectionViewCell?'не имеет члена 'imgAttachment'

Ответы [ 2 ]

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

Проблема заключается здесь.

var cell: UICollectionViewCell!

Вы объявили ячейку типа UICollectionViewCell.Таким образом, независимо от того, какой подкласс вы храните в нем, ваша ячейка будет иметь тип UICollectionViewCell.

. Вы должны изменить ее следующим образом:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if collectionView === collectionView1 {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellAttachment", for: indexPath) as! AttachmentCell
        cell.imgAttachment.image = imageArray1[indexPath.row]
        cell.delegate = self
        return cell
    } else if collectionView === collectionView2 {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellAttachmentView", for: indexPath) as! AttachmentViewCell
        cell.imgFileIcon.image = imgArray2[indexPath.row].fileIcon
        return cell
    } else {
        // Return the proper cell for other cases
    }
}

Или, если вы непреклоннывам нужен только один оператор return в конце делегата, тогда вы можете сделать это следующим образом:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    var yourCell: UICollectionViewCell!
    if collectionView === collectionView1 {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellAttachment", for: indexPath) as! AttachmentCell
        cell.imgAttachment.image = imageArray1[indexPath.row]
        cell.delegate = self
        yourCell = cell
    } else if collectionView === collectionView2 {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellAttachmentView", for: indexPath) as! AttachmentViewCell
        cell.imgFileIcon.image = imgArray2[indexPath.row].fileIcon
        yourCell = cell
    } else {
        // Return the proper cell for other cases
    }
    return yourCell
}
0 голосов
/ 26 ноября 2018

Вам нужно отключить компилятор, приведя cell к AttachmentCell.См. Приведенный ниже пример:

(cell as! AttachmentCell).imgAttachment.image = imageArray1[indexPath.row]
(cell as! AttachmentCell).delegate = self

Причина, по которой компилятор не может распознать переменную, заключается в объявлении переменной cell как UICollectionViewCell.Поскольку в UICollectionViewCell нет переменной imgAttachment, компилятор будет жаловаться.

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