Comme le titre l'indique, j'ai une UICollectionView
reliée à une UIViewController
par IB. J'ai une sous-classe UICollectionView
appelée imageCell
. Dans la méthode viewcontroller viewDidLoad
, j'enregistre la classe comme suit:
CGRect collectionViewRect = CGRectMake(384, 60, 728, 924);
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
imageCollectionView = [[UICollectionView alloc] initWithFrame:collectionViewRect collectionViewLayout:flow];
[imageCollectionView registerClass:[imageCell class] forCellWithReuseIdentifier:@"Cell"];
imageCollectionView.delegate = self;
imageCollectionView.dataSource = self;
J'appelle ensuite une méthode appelée getPhotos
dans viewDidAppear
(pour des raisons d'interface utilisateur) qui obtient des photos d'un service, puis j'appelle [imagCcollectionView reloadData];
dans getPhotos
.
Ensuite, dans cellForItemAtIndexPath
je fais ce qui suit:
imageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
GRKAlbum *album = [albums objectAtIndex:indexPath.item];
cell.titleLabel.text = album.name;
return cell;
Je sais que je ne fais rien de mal ici parce que la méthode est appelée et cell
n'est pas nil
et ni album
.
Ainsi, lorsque je lance tout ce code, la UICollectionView
apparaît, mais rien ne s'y trouve. Tout ce que je peux voir, c'est la couleur de fond de la collectionView
. Toute aide serait grandement appréciée.
Remarque: Je n'ai PAS créé de fichier XIB pour la classe imageCell
lorsque je l'ai créé et j'utilise Storyboards.
Il existe des moyens de déboguer cette situation.
Enregistrez UICollectionViewCell class à la place de votre customCell et définissez la couleur d'arrière-plan de la cellule dans cellForItem...
Si les cellules apparaissent à la première étape, essayez d’utiliser votre propre classe de cellules et de définir son arrière-plan.
Utilisez-vous le storyboard? puis..
Vous ne devez enregistrer aucune cellule pour la vue de collection. Vous pouvez utiliser la cellule prototype, il vous suffit de donner le bon identifiant pour la cellule.Vous pouvez tout concevoir dans votre cellule prototype. La classe personnalisée peut ne pas être nécessaire dans tous les cas.
Si vous avez créé la cellule dans le storyboard, supprimez simplement la déclaration de classe register. Vous n'avez pas besoin d'enregistrer quoi que ce soit (pour une vue de collection ou un tableau) si vous faites la cellule dans un story-board (en fait, les choses bousilleraient si vous le faites). La seule chose à faire est de définir l'identifiant dans IB.
J'ai eu le même problème résolu avec le remplacement de la ligne registercell
conventionnelle par la ligne ci-dessous
[self.collection registerNib:[UINib nibWithNibName:@"nibname" bundle:nil] forCellWithReuseIdentifier:identifier];
Je me sentais comme un mannequin quand j'ai réalisé que les cellules de ma collection étaient recouvertes par la barre de navigation. Alors, assurez-vous que votre barre de navigation (si vous en avez une) ne couvre pas les cellules de vue de collection que vous testez.
Vous instanciez une nouvelle vue de collection dans votre code, mais vous n'ajoutez pas la vue à l'écran. Vous dites que vous utilisez déjà des storyboards, je suppose que ce que vous pouvez voir est la vue de collection de votre storyboard, qui n'est probablement pas connectée à une source de données ou à un délégué? Soit ça, soit vous n’appelez pas recharger sur la bonne vue de collection.
Soit vous configurez la vue de votre collection dans le storyboard (et configurez une sortie pour tout ce qui doit être fait en code), soit vous la configurez complètement en code. Pour le moment, je pense que vous avez deux vues de collection.
Je l'ai fait en utilisant Xcode 6.2 storyboard. J'espère que ça aide
#import <UIKit/UIKit.h>
@interface InfoSecurity : UIViewController
@property (strong, nonatomic) IBOutlet UICollectionView *tabsCV;
@end
.m
**************
#import "InfoSecurity.h"
#import "TabsCell.h"
@interface InfoSecurity ()<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
@end
@implementation InfoSecurity
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.tabsCV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"TabsCell"];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 03;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 01;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(90, 50);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSString *reuseIdentifier = @"tabscellID";
TabsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
cell.TabTitleLabel.text= @"OPTIONS";
return cell;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
Parfois, la cellule de la vue de collection est noire (même couleur avec fond, invisible, masqué c'est non), le rechargement des cellules visibles est un travail à effectuer.