web-dev-qa-db-fra.com

Collection View Cells n'apparaissant pas

Je veux afficher autant collectionViewCells avec buttons qu'il y a de chaînes dans mon tableau. mais lorsque je lance le simulateur, l'arrière-plan de la variable CollectionView n'apparaît pas Quelle pourrait être l'erreur?

Voici le code de ma CollectionViewController que j'ai attaché à la CollectionView dans le tableau principal:

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
}

}

Voici les connexions du contrôleur de vue de collection:

 connections

Le contrôleur de vue sur le storyboard:

 viewcontroller

14
maidi

Avez-vous défini la CollectionViewController sur l'inspecteur d'identité du storyboard? :) 

Et j'essaierais d'appeler la reloadData() après avoir modifié les données dans la méthode viewDidLoad.

J'espère que cela pourra aider

11
Pavel Smejkal
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
    }

Essaye ça. Appelez cette fonction depuis la vue ne s'est pas chargée. Je pense que le problème est que votre collection n'est pas correctement présentée.

func viewDidLoad() {
    layoutCells()
}

Si cela fonctionne, vous pouvez modifier les options de mise en page pour répondre à vos besoins.

3
Subash

Le problème est de définir le titre sur le bouton, utilisez le code suivant.

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
}

J'espère que ça aide

3
Bhavin Kansagara

J'ai eu un problème similaire, j'ai trouvé que c'était en quelque sorte restreindre la taille de ma cellule. J'espère que cela t'aides.

Select the CollectionViewCell

Find this values in size inspector

2
Ges83

Sélectionnez la UIButton du storyboard, cochez la installed en bas à gauche de l'image ci-dessous.

 enter image description here

1
William Hu

Assurez-vous que l'identificateur de réutilisation correct est défini pour la cellule.

 enter image description here

1
Subash

Idées:

  • Vérifiez si votre identifiant de réutilisation de cellule est configuré.
  • Vérifiez si vous avez correctement défini la sous-classe de vue de collection dans le storyboard.
  • Placez des instructions print dans votre fonction cellForItemAtIndexPath pour voir si elle est appelée.
  • Je ne sais pas si cela devrait poser problème, mais Array est en réalité un type dans Swift. En utilisant cela comme nom de variable, on pourrait jouer avec la logique. Renommez-le en array (minuscule). Je crois que c'est de toute façon la meilleure pratique pour les noms de variables.
  • Faites autre chose dans la cellule dans cellForItemAtIndexPath, par exemple en modifiant la couleur d'arrière-plan. Si cela fonctionne, il y a peut-être un problème avec ce que vous faites avec les balises.
1

Tout d'abord, vérifiez que vous avez utilisé cette méthode: -

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

Il y a une recherche par section, le nombre de sections est donc le nombre de recherches. Nous pouvons donc également utiliser selon les besoins cette méthode.par défaut, nous pouvons utiliser 1

Et suivez l’étape dans le lien pour une meilleure soluation Vérifiez ce lien

1
Rushang Prajapati

vérifiez que vous définissez les points de vente CollectionView (source de données, délégué) dans votre storyBoard comme indiqué ci-dessous.

helpful image link

0
Hamid Reza Ansari