I\'m making an iOS app in swift, and I\'m trying to make a collectionView programmatically. I want to use my own subclass of UICollectionReusableView as a header for the Col
you can do it like this:
// Setup Header
self.collectionView?.registerClass(CollectionCustomHeader.self, forSupplementaryViewOfKind: CustomeHeaderHeader, withReuseIdentifier: "customHeader")
also:
override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
if kind == CustomeHeaderHeader {
let view = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "parallaxHeader", forIndexPath: indexPath)
return view
}
So I figured it out, with inspiration from Mohamad Farhand.
The problem was that I had to register the subclass itself with the collectionView, instead of UICollectionReusableView.self
, I used the instance of the subclass someView
.. So this solved my problem:
collectionView.registerClass(SupView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader , withReuseIdentifier: "someRandonIdentifierString")
And how to initialize the view:
someView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "someRandonIdentifierString", forIndexPath: indexPath) as! SupView
Here is a Swift 3 & 4 answer I've used in a project
self.collectionView.register(LibraryHeaderNib.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader , withReuseIdentifier: "LibraryHeaderNib")
and inside viewForSupplementaryElementOfKind
let reusableView = self.collectionView!.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "LibraryHeaderNib", for: indexPath) as! LibraryHeaderNib
return reusableView
Note that Swift 4.1 renames the ofKind: constant as UICollectionView.elementKindSectionHeader
.