web-dev-qa-db-fra.com

La sous-classe UICollectionViewCell ne démarre jamais

J'ai ajouté une vue de collection dans viewDidLoad comme ceci ...

self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 10, 10) collectionViewLayout:flowLayout];
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
self.collectionView.backgroundColor = [UIColor whiteColor];
[self.collectionView registerClass:[CameraCell class] forCellWithReuseIdentifier:CameraCellReuseIdentifier];
[self.collectionView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.collectionView];

Et j'ai une sous-classe UICollectionViewCell appelée CameraCell avec un init comme celui-ci ...

- (id)init
{
    self = [super init];
    if (self) {
        // Add customisation here...
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageChanged:) name:@"image" object:nil];

        self.contentView.backgroundColor = [UIColor yellowColor];

        self.imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
        self.imageView.contentMode = UIViewContentModeScaleAspectFill;
        self.imageView.clipsToBounds = YES;
        [self.imageView setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self.contentView addSubview:self.imageView];

        NSDictionary *views = NSDictionaryOfVariableBindings(_imageView);

        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_imageView]|"
                                                                                 options:0
                                                                                 metrics:nil
                                                                                   views:views]];

        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_imageView]|"
                                                                                 options:0
                                                                                 metrics:nil
                                                                                   views:views]];
    }
    return self;
}

Mais lorsque j'exécute l'application, la vue de la collection est là et je peux la faire défiler mais je ne vois aucune cellule. J'ai ajouté un point d'arrêt dans l'init de la cellule et il n'est jamais appelé. Y a-t-il une autre méthode que je dois remplacer?

MODIFIER

Lorsque je connecte la cellule dans cellForItemAtIndexPath ...

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CameraCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CameraCellReuseIdentifier forIndexPath:indexPath];

    NSLog(@"%@", cell);

    return cell;
}

Il affiche la bonne classe ...

<CameraCell: 0x1f07ba30; baseClass = UICollectionViewCell; frame = (0 20; 320 280); layer = <CALayer: 0x1f07bb40>> 
27
Fogmeister

La méthode que vous devez implémenter est - (instancetype)initWithFrame:(CGRect)rect

43
Alejandro

J'ai récemment essayé ceci dans le SDK iOS7 et j'ai dû remplacer initWithCoder car initWithFrame n'a jamais été appelé.

27
Archit Baweja

Si la cellule est chargée à partir d'un StoryBoard, vous voudrez remplacer les initialiseurs comme ceci:

rapide

override init?(coder aDecoder: NSCoder) {
  super.init(coder:aDecoder)
  //You Code here
} 

Objectif-C

- (id)initWithCoder:(NSCoder *)aDecoder {
  self = [super initWithCoder:aDecoder];
  //You code here
}

Si vous chargez depuis une nib, vous voudrez remplacer les initialiseurs comme ceci:

rapide

override init(frame: CGRect) {
  super.init(frame:frame)
  //You Code here
} 

Objectif-C

- (id)initWithFrame:(CGRect)frame {
  self = [super initWithFrame:frame];
  //You code here
}
15
Barlow Tucker