2015-12-09 5 views
2

Je souhaite configurer l'en-tête de la vue de collection et implémenter ainsi la méthode func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView.Pourquoi l'instruction "switch" ne fonctionne-t-elle pas dans la définition de l'en-tête de UICollectionView?

Cependant, il semble que l'instruction du commutateur ne fonctionne pas; Même lorsque j'ai essayé de définir l'étiquette dans la vue d'en-tête en dérivant en fonction de la section, la vue d'en-tête résultante dans toutes les sections a toutes les étiquettes que j'ai écrites.

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 
    switch kind { 
    case UICollectionElementKindSectionHeader: 
     let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Header", forIndexPath: indexPath) 
     let headerLabel = UILabel(frame: CGRectMake(2, 8, 120, 24)) 
     headerView.addSubview(headerLabel) 

     print(indexPath.section) 
     switch (indexPath.section) { 
     case 0: 
      headerLabel.text = "A" 
      return headerView 
     case 1: 
      headerLabel.text = "B" 
      return headerView 
     default: 
      break 
     } 

     return headerView 

    default: 
     assert(false, "Unexpected element kind") 
    } 
} 

Dans le code ci-dessus, les label de deux sections a à la fois l'étiquette A et B, se chevauchent les uns les autres.

Pourquoi le commutateur ne fonctionne-t-il pas dans mon cas?

Le contenu de ma collection affiche les données du serveur, et le print(indexPath.section) est exécuté 2 fois, chacune imprimant 0 et 1, dans cet ordre.

Est-ce lié au problème?

Répondre

1

Vous ajoutez une nouvelle étiquette à la vue d'en-tête chaque fois qu'elle est supprimée. Vous devriez avoir l'étiquette déjà présente dans l'en-tête (soit en tant que prototype, fichier xib ou créé lors de l'initialisation d'une classe d'en-tête personnalisée) et simplement définir le texte à chaque fois dans la méthode de votre question.

Si vous ne pouvez pas faire cela, vous devez vérifier l'existence de l'étiquette avant de la créer.

-1

Cas 1

Je pense que vous devez recharger la vue de collection seulement après avoir obtenu la réponse du serveur. Et initialiser le tableau response/tableData dans la vue apparaîtra.

Cas n ° 2

Vous pouvez essayer avec les données du tableau de réponse du serveur en état de commutation.