web-dev-qa-db-fra.com

UICollectionView - Ne pas afficher les cellules

Ce que j'essaie de réaliser est une table 3x3 avec UICollectionView. Mais il n'affiche aucune cellule lors de l'exécution de l'application. Il affiche la couleur de fond de la variable CollectionView (que j'ai définie en bleu) Quelqu'un peut-il m'aider ici?

Ce que j’ai fait, c’est de créer une storyboard et de simplement y glisser une CollectionViewController. Ce contrôleur a également apporté une variable CollectionView imbriquée. Ensuite, j'ai simplement utilisé les paramètres pour rendre son arrière-plan bleu et pour y ajouter une cellule dont j'ai fait pourpre l'arrière-plan (les deux uniquement à des fins de test). Pour finir, faites glisser une UILabel sur celle-ci. Maintenant, lorsqu’il est lancé, il n’affiche que le fond bleu, mais pas les cellules, bien qu’elles soient clairement visibles dans l’éditeur. J'ai ensuite essayé de créer une UICollectionViewController personnalisée, d'affecter la classe à la CollectionViewController au lieu de la classe standard et de procéder de la même manière à la cellule (attribuer une UICollectionViewCell personnalisée). Dans la coutume UICollectionViewController, j'ai implémenté les méthodes suivantes:

-(NSIntegear)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 9;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    AboutYourGoalsMultiSelectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    [[cell goal]setText:@"T"];

    return cell;
}

J'ai défini l'identifiant de la cellule sur "Cell" et établi une connexion de sortie de dataSource et un délégué entre CollectionView et le UICollectionViewController personnalisé. Tout est bien compilé… donc qu'est-ce qui me manque? N'aurait-il pas dû afficher quelque chose de bien avant de faire toutes ces modifications en utilisant simplement l'éditeur?

The storyboard editor with all the changes I did

18
Ke Vin

N'ayant pas trouvé de solution directe, j'ai essayé de mettre en place un nouveau projet et apporté les mêmes modifications et ajustements et, étonnamment, tout a fonctionné dès le début. J'ai ensuite copié le story-board dans mon ancien projet, supprimé tous les anciens fichiers et remplacé par les fichiers du nouveau projet. Tout fonctionne bien jusqu'à présent. Je n'ai aucune idée de l'erreur réelle, mais je suis heureux que cela fonctionne maintenant. Merci à tous ceux qui ont consulté ma question!

2
Ke Vin

Voir ma réponse ici , en bref, vous devez supprimer cette ligne si vous travaillez avec un storyboard:

 // Register cell classes
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
47
Alex Stone

Une source d'erreur commune est que dataSource et délégué ne sont pas définis dans les Outlets.

6
Patricia Beier

Vous avez une erreur dans la première ligne de votre code. 

-(NSIntegear)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

NSIntegear devrait être NSInteger.

Pas sûr que ce soit le problème car xcode ne devrait pas vous permettre d’exécuter votre projet avec cette erreur. J'ai juste essayé de suivre exactement les mêmes étapes que vous avez mentionnées (sans étiquette) mais avec la correction ci-dessus et cela a bien fonctionné pour moi. Voici une capture d'écran:

enter image description here

3
Rami Enbashi

Si vous essayez de créer simplement un simple CollectionViewController (pas personnalisé, c'est-à-dire par implémentation) et que vos cellules ne s'affichent pas lors de l'exécution de l'application, procédez comme suit: -

  • Tout d’abord, vous devez créer la classe tactile cacao (si elle n’a pas été créée) pour votre UICollectionViewController. FILE -> NEW -> COCOA TOUCH CLASS, puis choisissez UICollectionViewController dans la liste déroulante des sous-classes.
  • Maintenant, dans la section de votre inspecteur d’identité de votre CollectionViewController, ajoutez votre classe en choisissant dans la liste déroulante de la classe personnalisée.
  • Maintenant, ouvrez votre classe créée et éditez vos méthodes comme ceci:

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    //#warning Incomplete method implementation -- Return the number of sections
    return 1
     }
     override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    //#warning Incomplete method implementation -- Return the number of items in the section
    return 1
    }
    
  • Éditez seulement la valeur "retour" (qui est 0 par défaut) et écrivez simplement le nombre de cellules/éléments que vous voulez afficher ou que vous avez créés (dans ce cas, je n’avais créé qu’une cellule).

[ios] [Swift3] [xcode]

0
Mohammad Abraq