2017-02-24 9 views
0

J'utilise la fonction viewForSupplementaryElementOfKind pour appliquer la section d'en-tête du contrôleur uicollectionview. Toutefois, avant l'analyse asynchrone de l'API viewDidAppear, l'index de ligne est chargé dans la fonction viewForSupplementaryElementOfKind et devient hors limites. Que devrais-je faire?Section d'en-tête dans le contrôleur uicollectionview. hors de portée

Voici mon code ...

override func viewDidAppear(_ animated: Bool) { 
     callVideo3API() 
    } 

    override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { 

     switch kind { 

     case UICollectionElementKindSectionHeader: 
      let row1 = self.list[0] 
      let row2 = self.list[1] 
      let row3 = self.list[2] 

    let headerSection = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Header", for: indexPath) as! HeaderSection 


     headerSection.nameLabel01.text = row1.nickname 
     headerSection.nameLabel02.text = row2.nickname 
     headerSection.nameLabel03.text = row3.nickname 


     return headerSection 

    default: 

     assert(false, "Unexpected element kind") 
    } 
} 
+0

il est venu à cause de la source de données peut être vide. Vous devez donc recharger 'collectionView' après avoir récupéré la source de données. et publiez aussi vos méthodes 'numberOfSectionsInCollectionView' et' numberOfItemsInSection'. –

Répondre

1

Vous devez attendre jusqu'à ce que le callVideo3API() obtenir terminé. Après la réussite de callVideo3API(), vous pouvez recharger la vue de collection pour obtenir la sortie. S'il vous plaît suivez les étapes ci-dessous

  1. méthode Call callVideo3API()
  2. Faire CollectionView vide en retournant zéro à CollectionView DataSource[func numberOfSections(in collectionView: UICollectionView) -> Int, func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int]
  3. (en option) Au moment de l'exécution, vous pouvez callVideo3API() un spectacle un indicateur d'activité sur la place de votre CollectionView
  4. Après avoir réussi callVideo3API() vous pouvez recharger CollectionView avec une valeur DataSource correspondante. Cette fois-ci fonctionnera sans faute :-) (Si vous mettez l'indicateur d'activité ne pas oublier de retirer après l'appel api réussie)