UICollectionView indexPath.ligne ou un élément, les éléments n'est pas stable, en sautant autour de

J'ai créé une collection de vue et je suis le chargement des images. Problème, je suis en cours d'exécution à travers, c'est quand je clique sur une cellule pour obtenir indexPath.élément ou indexPath.ligne, les nombres sont tous foutu. En cliquant sur la première image ne s'affiche pas quoi que ce soit, en cliquant sur le prochain va me donner 0. En cliquant sur le troisième va me donner un 1, et clique à nouveau sur le second me donne un 2. Ce qui se passe tout au long de la vue. Doit être quelque chose de mal, que je suis en train de faire. Voici mon code:

viewDidLoad:

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
layout.sectionInset = UIEdgeInsetsMake(10, 20, 10, 20);
[layout setItemSize:CGSizeMake(75, 75)];
self.images = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 230, self.view.frame.size.width, 200) collectionViewLayout:layout];
self.images.delegate = self;
self.images.dataSource = self;
[self.images registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[self.view addSubview:self.images];

délégué méthodes:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return self.imagesGallery.count; //image paths for server
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.layer.borderWidth = 1;
    cell.layer.borderColor = [[UIColor whiteColor]CGColor];
    UIImageView *image = [[UIImageView alloc]init];
    image.image = [UIImage imageWithData:[self.imagesGallery objectAtIndex:indexPath.row]];
    image.frame = CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height);
    [cell addSubview:image];
    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"%d", indexPath.item);
}

Je ne suis pas sûr de la façon d'obtenir un contrôle précis de ce qui va où. Sont-ils numérotés normalement comme:

0 1 2
3 4 5
....

Ou est-il une façon spéciale qu'ils obtiennent numérotés basé sur les sections? Comment font-ils remplis?

Puisque vous avez une section unique, votre exemple de mise en page semble correct. Si vous avez plusieurs sections, chaque section aura cette mise en page avec un espace vide de remplir la dernière "ligne" de la section.
Vous allez aussi avoir des problèmes d'affichage, car chaque fois que cellForItemAtIndexPath est appelé, vous ajouter une autre image à afficher à la cellule sans jamais supprimer l'ancienne.
Qu'entendez-vous par là? N'est pas le processus le même que la vue de la table? De quoi ai-je besoin d'ajouter à optimiser l'affichage?
Le processus est "exactement" la même chose qu'avec les tableviews (où, exactement, est défini comme "pour les fins de cette question') dequeueReusableCell... de réutilisation des cellules existantes qui ont été défilé hors de l'écran. Dans votre cas, quand cela arrive, le réutilisé les cellules contiennent déjà une image vue ajoute la dernière fois que la cellule a été utilisé. Vous pouvez ensuite ajouter un deuxième et un troisième et un quatrième et...) d'affichage de l'image lorsque la cellule est ensuite réutilisé.
Vous devez également ajouter l'affichage de l'image à la cellule.contentView, pas de cellule. En supposant que vous n'êtes pas en ajoutant toutes les autres vues de la cellule, il devrait être suffisant pour ajouter supprimer tous les sous-vues de la cellule.contentView avant de rajouter de l'affichage de l'image.

OriginalL'auteur denikov | 2014-04-23