Как установить содержимое UICollectionViewCell - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь отобразить базовую c сетку квадратов в виде коллекции. Я знаю количество столбцов и количество строк, которые я хотел бы визуализировать. Однако я не могу понять, как программно визуализировать квадраты.

У меня есть контроллер вида, который выглядит следующим образом:

class BoardViewController: UIViewController {

    @IBOutlet weak var board: UICollectionView!

    var game = Game()

    override func viewDidLoad() {
        super.viewDidLoad()

        board.delegate = self
        // Do any additional setup after loading the view.
    }

}

extension BoardViewController: UICollectionViewDelegateFlowLayout {

}


extension BoardViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return game.getColumns() * game.getRows()
    }

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

    }

}

Я знаю, что мне нужно использовать метод cellForItemAt для визуализации пользовательских ячеек.

У меня также есть класс CustomView (под UIView), подобный этому:

import UIKit

class CustomView: UIView {

    override init(frame: CGRect){
        super.init(frame: frame)
        self.backgroundColor = UIColor.blue
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}

, а затем класс BoardGridCell:

class BoardGridCell: UICollectionViewCell {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.contentView = CustomView()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }



}

Документы Apple говорят:

"Чтобы настроить внешний вид вашей ячейки, добавьте представления, необходимые для представления содержимого элемента данных в качестве подпредставлений, к представлению в свойстве contentView. Не добавляйте подпредставления напрямую в саму ячейку. Ячейка управляет несколькими слоями содержимое, из которого представление содержимого является только одним. В дополнение к представлению содержимого ячейка управляет двумя фоновыми представлениями, которые отображают ячейку в ее выбранном и невыбранном состояниях. "

Однако всякий раз, когда я пытаюсь установить Свойство contentView, я получаю «Невозможно присвоить свойству:« contentView »является только для получения»

Итак, мой вопрос - как добавить подпредставления в свойство contentView?

Я очень новичок в Свифте, поэтому я был бы очень признателен, если бы кто-нибудь мог уточнить это для меня.

Спасибо

1 Ответ

0 голосов
/ 11 апреля 2020

Вы установили размер элементов?

в CollectionViewDelegateFlowLayout

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    return CGSize(width: 100, height: 100)
}

, где значение 100 может быть некоторым вычисленным числом, основанным на размере вашего экрана

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