Создайте несколько UICollectionViews с пользовательскими ячейками в одном ViewController - PullRequest
0 голосов
/ 28 октября 2018

Я хочу добавить три UICollectionViews в один ViewController. Я хочу, чтобы у двух из них были собственные ячейки. Не было бы проблем, если бы у CollectionViews не было пользовательских ячеек.

Это было бы моим решением без пользовательской ячейки:

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


        if collectionView == gamePad{
            cell = gamePad.dequeueReusableCell(withReuseIdentifier: "coloredCell", for: indexPath)
            cell?.backgroundColor = UIColor.gray
            cell?.layer.cornerRadius = (cell?.frame.height)!/2

        }
        if collectionView == blackCounterCV {
            cell = blackCounterCV.dequeueReusableCell(withReuseIdentifier: "blackC", for: indexPath)
            cell?.backgroundColor = UIColor.black
            cell?.layer.cornerRadius = (cell?.frame.height)!/2    
        }
        if collectionView == whiteCounterCV {
            cell = whiteCounterCV.dequeueReusableCell(withReuseIdentifier: "whiteC", for: indexPath)
            cell?.backgroundColor = UIColor.white
            cell?.layer.cornerRadius = (cell?.frame.height)!/2

        }
        return cell!
    }

У меня есть ярлык, который я создал в отдельном файле. Теперь я увидел, что я должен разыграть клетку как класс UICollectionViewCell.

Это моя идея, которая не сработала:

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


        if collectionView == gamePad{
            cell = gamePad.dequeueReusableCell(withReuseIdentifier: "coloredCell", for: indexPath)
            cell?.backgroundColor = UIColor.gray
            cell?.layer.cornerRadius = (cell?.frame.height)!/2

        }
        if collectionView == blackCounterCV {
            cell = blackCounterCV.dequeueReusableCell(withReuseIdentifier: "blackC", for: indexPath) as! BlackCCollectionViewCell
            cell?.backgroundColor = UIColor.black
            cell?.layer.cornerRadius = (cell?.frame.height)!/2
            cell.blackLbl.text = "TEST"
        }
        if collectionView == whiteCounterCV {
            cell = whiteCounterCV.dequeueReusableCell(withReuseIdentifier: "whiteC", for: indexPath) as! WhiteCCollectionViewCell
            cell?.backgroundColor = UIColor.white
            cell?.layer.cornerRadius = (cell?.frame.height)!/2
            cell.whiteLbl.text = "TEST"

        }
        return cell!
    }

Ошибка, которая отображается:

Значение типа 'UICollectionViewCell?' не имеет члена 'blackLbl' / 'whiteLbl'

Так что я думаю, что актерский состав не сработал так, как я хотел.

Как я могу решить эту проблему?

1 Ответ

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

Значение типа 'UICollectionViewCell?'не имеет члена 'blackLbl' / 'whiteLbl'

Ваш код кажется правильным, так что проблема может быть в том, что что-то отсутствует в InterfaceBuilder.

Таким образом, эта проблема может быть отсутствующим Class именем, отсутствующим в ячейке.

убедитесь, что вы добавили пользовательский тип класса в ячейку в IB

, например BlackCCollectionViewCell на раскадровке, убедитесь, что в правой ячейке есть этот класс.Here

ОБНОВЛЕНИЕ: поскольку это была ошибка компиляции, попробуйте этот код.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if collectionView == gamePad{
        var cell: UICollectionViewCell?
        cell = gamePad.dequeueReusableCell(withReuseIdentifier: "coloredCell", for: indexPath)
        cell?.backgroundColor = UIColor.gray
        cell?.layer.cornerRadius = (cell?.frame.height)!/2
        return cell!
    }
    if collectionView == blackCounterCV {
       let cell = blackCounterCV.dequeueReusableCell(withReuseIdentifier: "blackC", for: indexPath) as! BlackCCollectionViewCell
        cell.backgroundColor = UIColor.black
        cell.layer.cornerRadius = (cell.frame.height)/2
        cell.blackLbl.text = "TEST"
        return cell
    }
    if collectionView == whiteCounterCV {
        let cell = whiteCounterCV.dequeueReusableCell(withReuseIdentifier: "whiteC", for: indexPath) as! WhiteCCollectionViewCell
        cell.backgroundColor = UIColor.white
        cell.layer.cornerRadius = (cell.frame.height)/2
        cell.whiteLbl.text = "TEST"
        return cell
    }
        return UICollectionViewCell()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...