119 votes

La fonction cellForItemAtIndexPath de UICollectionView n'est pas appelée.

Ce n'est que la deuxième fois que j'utilise les UICollectionView et j'ai peut-être eu les yeux plus gros que le ventre, mais il n'empêche :

J'implémente un UICollectionView (myCollectionView) qui utilise des UICollectionViewCell personnalisés que j'ai sous-classés. Les cellules sous-classées (FullReceiptCell) contiennent des UITableView et ont la taille du viewcontroller. J'essaie de permettre le défilement horizontal entre les FullReceiptCell.

Le UICollectionViewController sous-classé qui contient myCollectionView est poussé sur une pile de contrôleurs de navigation. Actuellement, le myCollectionView est visible et le défilement horizontal est activé. Cependant, aucune cellule n'est visible. J'ai confirmé que

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

a été exécuté et renvoie un nombre entier supérieur à 0. J'ai également confirmé que le délégué et la source de données de myCollectionView sont correctement définis dans IB pour le contrôleur UICollectionView sous-classé.

La méthode où les cellules doivent être chargées :

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

n'est pas appelé.

C'est ici que je pousse le UICollectionViewController et ma méthode viewDidLoad dans ce contrôleur (NOTE : initWithBill est une surcharge de l'initialisateur normal) :

Dans le fichier ViewControllers .m précédent :

FullReceiptViewController *test = [[FullReceiptViewController alloc] initWithBill:currentBill];
test.title = @"Review";
[self.navigationController pushViewController:test animated:YES];

Dans FullReceiptViewController.m :

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.myCollectionView registerClass:[FullReceiptCell class] forCellWithReuseIdentifier:@"FullReceiptCellIdentifier"];
    self.myCollectionView.pagingEnabled = YES;
    // Setup flowlayout

    self.myCollectionViewFlowLayout = [[UICollectionViewFlowLayout alloc] init];
    [self.myCollectionViewFlowLayout setItemSize:CGSizeMake(320, 548)];
    [self.myCollectionViewFlowLayout setSectionInset:UIEdgeInsetsMake(0, 0, 0, 0)];
    [self.myCollectionViewFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
    self.myCollectionViewFlowLayout.minimumLineSpacing = 0;
    self.myCollectionViewFlowLayout.minimumInteritemSpacing = 0;
    [self.myCollectionView setCollectionViewLayout:myCollectionViewFlowLayout];
    //testing to see if the collection view is loading
    self.myCollectionView.backgroundColor = [UIColor colorWithWhite:0.25f alpha:1.0f];

Avez-vous une idée de la raison pour laquelle il n'est pas appelé ?

3voto

chanil Points 241

Dans mon cas, le changement de translucidité de UINavigationBar en NO a résolu le problème.

3voto

Bart Doe Points 703

Dans Xcode 7.0.1, nous avons rencontré ce problème lorsque nous avons copié un storyboard et le code qui l'accompagne depuis un autre projet. La vue de la collection avait une disposition de flux personnalisée définie dans le storyboard. La solution était la suivante :

  • Suppression du schéma de flux dans l'IB
  • Compiler/exécuter l'application
  • Remettre la disposition du flux

Maintenant ça marche :)

3voto

Stritt Points 348

J'ai oublié de mettre le masque de redimensionnement automatique à false sur la vue de la collection :

collectionView.translatesAutoresizingMaskIntoConstraints = false

3voto

Deco Points 476

Si vous utilisez les protocoles de vue de la collection, vous devez connecter la CollectionViewDataSource y CollectionViewDelegate à votre ViewController. Interface builder outlets

3voto

poGUIst Points 138

Dans le storyboard/xib, la propriété cellSize de UICollectionView DOIT être différente de {0, 0}.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X