Объекты коллекции не отображаются

Я хочу показать как можно больше collectionViewCells с buttons, поскольку в моем массиве есть строки. но когда я запускаю симулятор, есть только фон CollectionView, но не показаны клетки. Что может быть ошибкой?

Вот код из моего CollectionViewController, который я прикреплял к CollectionView в main.storyboard:

class CollectionViewController: UICollectionViewController {

var Array = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    Array = ["1","2","3","4","5"]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int) -> Int {
    return Array.count
}

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        button.titleLabel?.text = Array[indexPath.row]

        return cell
}

}

Это соединения контроллера коллекции:

connections

Контроллер просмотра на раскадровке:

viewcontroller

Ответы

Ответ 1

Вы установили CollectionViewController в инспектор идентичности раскадровки?:)

И я попытаюсь вызвать reloadData() после изменения данных в методе viewDidLoad.

Надеюсь, что поможет

Ответ 2

func layoutCells() {
        let layout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10)
        layout.minimumInteritemSpacing = 5.0
        layout.minimumLineSpacing = 5.0
        layout.itemSize = CGSize(width: (UIScreen.mainScreen().bounds.size.width - 40)/3, height: ((UIScreen.mainScreen().bounds.size.width - 40)/3))
        collectionView!.collectionViewLayout = layout
    }

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

func viewDidLoad() {
    layoutCells()
}

Если это работает, вы можете изменить параметры макета в соответствии с вашими потребностями.

Ответ 3

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

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        //button.titleLabel?.text = Array[indexPath.row]
        button.setTitle(Array[indexPath.row], forState: UIControlState.Normal)
        return cell
}

Надеюсь, что это поможет

Ответ 4

У меня была аналогичная проблема, я обнаружил, что это как-то сдерживает размер моей камеры. Надеюсь, это поможет.

Select the CollectionViewCell

Find this values in size inspector

Ответ 5

Идеи:

  • Проверьте, настроен ли идентификатор повторного использования вашей ячейки.
  • Проверьте, правильно ли задан подкласс коллекций в раскадровке.
  • Поместите выражения print внутри вашей функции cellForItemAtIndexPath, чтобы увидеть, когда-либо вызывается.
  • Не уверен, что это проблема, но Array - фактически тип в Swift. Использование этого в качестве вашего имени переменной может каким-то образом испортить логику. Переименуйте его в Array (в нижнем регистре). Я считаю, что это наилучшая практика для имен переменных в любом случае.
  • Сделайте что-то еще в ячейке в cellForItemAtIndexPath, например, измените цвет фона. Если это работает, возможно, что-то не так с тем, что вы делаете с тегами.

Ответ 6

Ваша проблема в

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int)

подпись метода. Это неверно. Это должно быть

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

и с override спецификацией (потому что UICollectionViewController имеет собственный, вот почему вы получаете пустую коллекцию).

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  return Array.count
}

Ответ 7

Прежде всего проверьте, что вы использовали этот метод: -

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return searches.count
}

Делает один поиск в каждом разделе, поэтому количество секций - это счетчик массива запросов. поэтому также мы можем использовать по мере необходимости этот метод. По умолчанию мы можем использовать retuen 1

И Следуйте за шагом в Link для лучшей уступки Проверьте эту ссылку

Ответ 8

Выберите UIButton в раскадровке, проверьте installed как внизу слева на изображении ниже.

введите описание изображения здесь

Ответ 9

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

введите описание изображения здесь