web-dev-qa-db-fra.com

UICollectionViewCells n'apparaissant pas dans un UICollectionView

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.

15
virindh

Il existe des moyens de déboguer cette situation. 

  1. Enregistrez UICollectionViewCell class à la place de votre customCell et définissez la couleur d'arrière-plan de la cellule dans cellForItem... 

  2. 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. 

76
Anil Varghese

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.

42
rdelmar

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];
16
BhushanVU

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.

0
nenchev

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. 

0
jrturton

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.
}
0
alvin

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.

0
Yao Li