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>>
La méthode que vous devez implémenter est - (instancetype)initWithFrame:(CGRect)rect
J'ai récemment essayé ceci dans le SDK iOS7 et j'ai dû remplacer initWithCoder
car initWithFrame
n'a jamais été appelé.
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
}