Ich mache eine iOS-App in Swift, und ich versuche, eine CollectionView programmgesteuert zu machen. Ich möchte meine eigene Unterklasse von UICollectionReusableView als eine Überschrift für die CollectionView verwenden, weil ich einige Schaltflächen und ein strechbares Bild in der Kopfzeile benötigen.iOS; programmgesteuert collectionView mit benutzerdefinierten Headern
SupView ist die UICollectionReusableView.
override func viewDidLoad() {
super.viewDidLoad()
let layout = UICollectionViewFlowLayout()
layout.headerReferenceSize = CGSizeMake(self.view.frame.width, 200)
someView = SupView(frame: CGRectMake(0, 0, view.frame.width, 200))
collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "headerCell") // UICollectionReusableView
self.view.addSubview(collectionView)
}
Ich versuche, den Ergänzungs Blick in viewForSupplementaryElementOfKind
, wie dies einfügen, aber ich erhalte eine Fehlermeldung beim Versuch, den Header zu erstellen:
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
var reusableView : UICollectionReusableView? = nil
// Create header
if (kind == UICollectionElementKindSectionHeader) {
// Create Header
let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "headerCell", forIndexPath: indexPath) as! SupView
headerView.frame = CGRectMake(0, 0, view.frame.width, 200)
reusableView = headerView
}
return reusableView!
}
Der Fehler ist in let headerView = ...
und sagt: "signal SIGABRT"
Wie soll ich die Kopfansicht initialisieren, damit ich sie in mein Flowlayout eingeben kann? vielleicht somewith mit
collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "headerCell")
aber wenn ich versuche, die SupView-Klasse registrieren es mir Fehler gibt:
.../collectionViewPlay/ViewController.swift:32:24: Cannot invoke 'registerClass' with an argument list of type '(SupView!, forSupplementaryViewOfKind: String, withReuseIdentifier: String)'
Irgendwelche Ideen?
EDIT:
Die Umsetzung der Unterklasse angefordert wurde:
import UIKit
class SupView: UICollectionReusableView {
//////////////////////////////////////////////////////////////////////////////
override init(frame: CGRect) {
super.init(frame: frame)
self.myCustomInit()
}
//////////////////////////////////////////////////////////////////////////////
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.myCustomInit()
}
func myCustomInit() {
print("hello there from SupView")
}
}
Zeigen Sie die Klassenimplementierung von SupView – Shoaib