web-dev-qa-db-fra.com

UICollectionView ajoutant UICollectionCell

Lorsque j'essaie de mettre UICollectionCell à UICollectionView dans Interface Builder, je ne peux pas le mettre pour des raisons inconnues. La cellule va dans la barre d’outils sans ajouter à UICollectionView

J'utilise:

  • iOS SDK 6.0
  • XCode 4.5.1
  • Je n'utilise pas Storyboard
71

Si vous utilisez XIB, créez-en un nouveau avec CellName.xib, ajoutez-lui CollectionViewCell, indiquez le nom de la classe personnalisée UICollectionView. Après cela, utilisez registerNib.

Exemple de code: https://github.com/lequysang/TestCollectionViewWithXIB

139
LE SANG

Vous ne pouvez pas mettre UICollectionViewCell directement dans UiCollectionView si vous utilisez le fichier Xib. Ce n'est possible qu'en storyboard. Ajoutez une UICollectionViewCell dans un fichier Xib séparé. Donnez le nom de votre classe. Puis enregistrez soit class soit xib avant que la vue collection apparaisse

 [self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:CELL_ID];

Cela se fait généralement dans viewDidLoad.

Ceci est l'implémentation d'une UICollectionViewCell personnalisée sans utiliser Xib 

 @implementation CollectionViewCell
 @synthesize imageView = _imageView;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {

    self.backgroundColor = [UIColor whiteColor];
    self.layer.shadowColor = [UIColor blackColor].CGColor;
    self.layer.shadowRadius = 5.0f;
    self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
    self.layer.shadowOpacity = 0.5f;

    // Selected background view
    UIView *backgroundView = [[UIView alloc]initWithFrame:self.bounds];
    backgroundView.layer.borderColor = [[UIColor colorWithRed:0.529 green:0.808 blue:0.922 alpha:1]CGColor];
    backgroundView.layer.borderWidth = 10.0f;
    self.selectedBackgroundView = backgroundView;

    // set content view
    CGRect frame  = CGRectMake(self.bounds.Origin.x+5, self.bounds.Origin.y+5, self.bounds.size.width-10, self.bounds.size.height-10);
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
    self.imageView = imageView;          
    [imageView release];
    self.imageView.contentMode = UIViewContentModeScaleAspectFill ;
    self.imageView.clipsToBounds = YES;
    [self.contentView addSubview:self.imageView];       

}
return self;
 }
18
Anil Varghese

D'accord. Il existe en fait une solution de contournement pour cela, si vous vouliez vraiment que la cellule soit dans collectionView dans le fichier xib du constructeur d'interface:

  1. Créer un storyboard.
  2. Créez UICollectionView et UICollectionViewCell à partir du générateur d'interface.
  3. Ajustez l'interface utilisateur avec les contraintes, etc. pour qu'elle ressemble exactement à ce que vous souhaitiez.
  4. Créez un nouveau fichier xib. 
  5. Copiez tout le contenu du storyboard dans le nouveau fichier xib.

Cela fonctionnera parfaitement.

  • Il est important de garder à l’esprit que l’étape 3 est très importante, car après l’étape 5, vous n'êtes plus censé glisser et vous déplacer dans UICollectionView. Si vous le faites, la cellule disparaîtra comme par magie! En dehors de cela, cela fonctionnera parfaitement. 
0
RainCast