2015-10-28 2 views
1

J'ai un UICollectionView que j'ai ajouté à mon UIViewController dans mon Storyboard.cellForItemAtIndexPath jamais appelé

Il contient un UICollectionViewCell de la classe BookCell et l'identificateur réutilisable BookCell.

bookArray est transmis dans la méthode prepareForSegue de la ViewController précédente

cellForItemAtIndexPath ne sera jamais appelé. J'ai essayé de déclarer BookCollectionVC en tant que délégué et dataSource à la fois dans Storyboard et dans viewDidLoad, comme vous pouvez le voir commenté, mais cela ne change rien.

J'ai lu plusieurs réponses SO relatives à la taille de la cellule, au nombre d'éléments dans la section, aux multiples façons de déclarer delegate et dataSource et j'ai essayé/vérifié toutes les réponses.

Des idées?

class BookCollectionVC: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 

    @IBOutlet weak var collection: UICollectionView! 

    var bookArray = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

//  collection.delegate = self 
//  collection.dataSource = self 
    } 

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

     if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("BookCell", forIndexPath: indexPath) as? BookCell { 

      // This never gets called 
      let bookIsbn = bookArray[indexPath.row] 
      cell.configureCell(bookIsbn) 
      return cell 

     } else { 

      return UICollectionViewCell() 
     } 
    } 

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

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
     return 1 
    } 

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
     let screenSize: CGRect = UIScreen.mainScreen().bounds 
     let screenWidth = screenSize.width 
     let cellWidth = screenWidth/4 

     return CGSizeMake(cellWidth,cellWidth) 
    } 
+0

pouvez-vous s'il vous plaît vérifier les éléments dans le tableau 'bookArray'? – deoKasuhal

+0

Que voulez-vous dire vérifier les éléments 'into'? @Dev –

+0

S'il n'y a pas d'éléments dans 'bookArray', alors' cellForItemAtIndexPath' ne sera jamais appelé. Dans l'exemple de code, vous avez assigné 'bookArray' comme tableau vide. Vous devez vous assurer que 'bookArray' a un objet pour que la méthode' cellForItemAtIndexPath' soit en cours d'exécution. – deoKasuhal

Répondre

0

En tant que test, n'utilisez pas de if-let. Juste obtenir la valeur de la cellule et l'imprimer. Quel est son type? Avez-vous correctement assigné les cellules à la classe personnalisée (BookCell) dans votre StoryBoard?