Quel est le rôle de registerClass:forCellWithReuseIdentifier:
méthode? Selon la documentation des développeurs d'Apple, il est censé
"Enregistrer une classe à utiliser pour créer de nouvelles cellules de vue de collection."
Lorsque j'essaie de l'utiliser mon projet, j'obtiens une vue de collection noire. Quand je le supprime, tout fonctionne bien.
#define cellId @"cellId"
#import "ViewController.h"
#import "Cell.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@property(strong, nonatomic)NSMutableArray * photoArray;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"%@",_photoArray);
_photoArray = [[NSMutableArray alloc]initWithCapacity:0];
[_collectionView registerClass:[Cell class] forCellWithReuseIdentifier:cellId];
for(int i=1;i<=12;i++)
{
NSString * imgName = [NSString stringWithFormat:@"%d.png",i];
UIImage *img = [UIImage imageNamed:imgName];
[_photoArray addObject:img];
}
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return _photoArray.count;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 1;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
Cell* cell = [_collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
cell.cellImage.image = [_photoArray objectAtIndex:indexPath.row];
return cell;
}
Si vous avez déjà créé votre UICollectionView dans Storyboard, connecté vos dataSource
et delegate
, et vous avez ajouté toutes les méthodes requises:
numberOfItemsInSection
numberOfSectionsInCollectionView
cellForItemAtIndexPath
La méthode registerClass
/registerCell
n'est alors pas requise. Cependant, si vous devez réutiliser une vue, des données ou des cellules, vous devez utiliser ces méthodes pour qu'iOS puisse remplir votre UICollectionView selon vos besoins. Cela peut également être fait dans votre Storyboard en définissant la cellule de prototype (le même principe que la méthode registerClass
.
De plus, si vous cherchez une bonne explication sur ce que fait registerCell
et comment l'utiliser, consultez ce lien et faites défiler jusqu'à la section inférieure intitulée "Réutilisation des cellules et des vues".
Je suis d'accord avec réponse de RazorSharp et je voulais souligner que cette phrase clé pour moi dans le lien Techtopia est:
Si la classe de cellules a été écrite en code, l'enregistrement est effectué à l'aide de la méthode registerClass: de UICollectionView, sinon utilisez registerNib