Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Subclassing UICollectionReusableView

Tags:

ios6

I've been trying to subclass UICollectionReusableView in a non-storyboard iPad project. I've built a view in IB and hooked it up to my custom class, registered the class for reuse in the viewController where my collection view lives, and am calling it correctly in

UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

However, nothing shows up in my header areas in the UICollectionView. I think I need too init the view with coder, but am unsure how to do that correctly. I followed a couple of examples I found, but the header view still does not appear in my collection view.

- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
    [[NSBundle mainBundle] loadNibNamed:@"CVHeaderView" owner:self options:nil];
    [self addSubview:self.categoryNameLabel];
}
return self;

}

Can anyone point me in the right direction?

like image 800
Alpinista Avatar asked Mar 14 '26 12:03

Alpinista


2 Answers

If you use a storyboard and select the header/footer checkmark initWithCoder: will be called.

If you do not use the storyboard (or do not click header/footer) but hook it up manually you have to register your custom classes and initWithFrame: will be called.

[self.collectionView registerClass:[GameCardCell class] forCellWithReuseIdentifier:@"GameCardCell"];
[self.collectionView registerClass:[PlayerHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"PlayerHeaderView"];
[self.collectionView registerClass:[PlayerFooterView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"PlayerFooterView"];

Note: Both will be called only once. If the view comes out of the cache prepareForReuse will be called.

like image 98
HeikoG Avatar answered Mar 16 '26 01:03

HeikoG


In my case, initWithFrame: is called automatically when dequeueing it for the first time. Try to implement this method and see if it works.

like image 45
Stelian Iancu Avatar answered Mar 16 '26 00:03

Stelian Iancu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!