2013-02-20 3 views
3

J'ai essayé de sauvegarder l'état ou l'ordre des cellules dans un UICollectionView après avoir changé d'emplacement dans le UICollectionView. Quand j'utilise indexPathsForVisibleItems, j'obtiens des index qui sont toujours dans le même ordre. Ils ne reflètent pas le changement d'ordre. Si je pouvais obtenir l'objet à chaque indexPath, je pourrais au moins essayer de les parcourir pour obtenir l'ordre résultant.Objet/Élément hors des cellules UICollectionView au lieu de l'index?

J'ai utilisé ce code. Et trouvé qu'il a retourné un état rafraîchi de indexPaths dans [0,0]. L'ordre est toujours le même, car il me dit quelles cellules ont quelque chose en eux, pas ce qui est dans chaque cellule. Je ne sais pas assez ou où commencer à obtenir l'objet/élément dans chaque cellule.

NSArray *visible = [self.collectionView indexPathsForVisibleItems]; 
NSMutableArray *rowsArray = [NSMutableArray arrayWithCapacity:[visible count]]; 
[visible enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { 
    [rowsArray addObject:@(indexPath.item)]; 

J'ai besoin des éléments ou des objets à chaque emplacement. Comment puis-je parcourir tous les emplacements de cellules pour récupérer l'élément là. Je prévois d'utiliser le compte d'un tableau utilisé pour remplir UICollectionView afin de parcourir tous les emplacements et d'y stocker l'objet. Il n'y a qu'une seule section et les cellules semblent stocker des objets comme celui-ci <Slide: 0x7585200>

La fonction ci-dessus renvoie NSLogs dans ce format "<NSIndexPath 0x8490390> 2 indexes [0, 0]"

Je dois obtenir ce qui est à cet endroit.

Je ne suis pas familier avec NSIndexPath ou son formatage. Même la commande/fonction m'aiderait à sortir un objet. Merci.

(Addendum) Je pense d'utiliser quelque chose comme [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; Je ne sais pas ce que je peux stocker dans.

+0

Regardez la référence NSIndexPath UIKit ajouts. – rdelmar

+0

Il semble que je puisse utiliser cellForItemAtIndexPath. Que puis-je stocker dans? Je suis nouveau à Objective-C et les "types" me donnent un problème. J'allais faire quelque chose comme '[self.collectionView cellForItemAtIndexPath: [NSIndexPath indexPathForRow: 0 dansSection: 0]];' Je ne sais pas ce que je peux mettre cela. – RasterGod

+0

Si vous êtes nouveau à Objective-C, alors peut-être que les vues de collection ne sont pas le meilleur endroit pour commencer. cellForRowAtIndexPath est une méthode de source de données appelée par la vue de collection, et non par vous. Si vous souhaitez en savoir plus sur les vues de collection, vous devriez regarder la vidéo de la WWDC 2012, "Présentation des vues de collections". – rdelmar

Répondre

4

CollectionView est une collection de UIViews (appel UICollectionViewCell). Chaque cellule a un indexPath (section, ligne) pour indiquer la position de mise en page dans le contenu de collectionView. Dans le cas où vous avez 1 section, section toujours = 0.

Les cellules visibles désignent toutes les cellules visibles à l'écran à ce moment-là (visibles dans le cadre de défilement ou le cadre de vue de collection). indexPathsForVisibleItems = array indexPath de visibleCells

cellForItemAtIndexPath est une méthode pour obtenir un collectionViewCell à tout indexPath que vous voulez, utilisez souvent pour obtenir la cellule lorsque l'on sélectionne:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 
    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; 
    NSLog(@"%@",cell); 
} 

Enquêter plus de vidéo d'Apple UICollectionView et par exemple: https://developer.apple.com/library/ios/#samplecode/CollectionView-Simple/Introduction/Intro.html

https://developer.apple.com/videos/wwdc/2012/

Questions connexes