Ich möchte eine CollectionView
Methoden aus einer anderen swift-Datei anstelle von ViewController
aus irgendeinem Grund verwenden.Verwenden Sie CollectionView-Methoden aus einer anderen Swift-Datei
Ich habe dies in meinem ViewController
:
@IBOutlet weak var collectionView: UICollectionView!
var broadcastColletionView = BroadcastCollectionView()
override func viewDidLoad() {
super.viewDidLoad()
broadcastColletionView = BroadcastCollectionView(eventItems: eventItems,collectionView: collectionView, broadastObject: broadastObject)
collectionView.dataSource = broadcastColletionView
collectionView.delegate = broadcastColletionView
}
Und ich habe BroadcastCollectionView.swift, die die Collection Delegatmethoden enthält:
class BroadcastCollectionView: NSObject,UICollectionViewDelegate, UICollectionViewDataSource {
var eventItems = [Eventtype]()
var alreadyChecked: Bool = false
var cellHistory: IndexPath = []
var collectionView: UICollectionView!
var broadastObject = Broadcast()
init(eventItems: [Eventtype],collectionView: UICollectionView,
broadastObject: Broadcast) {
self.eventItems = eventItems
self.collectionView = collectionView
self.broadastObject = broadastObject
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return eventItems.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "brCollectionView", for: indexPath) as! BroadcastCollectionViewCell
self.collectionView = collectionView
cell.eventImage.image = eventItems[indexPath.row].image
cell.eventType = eventItems[indexPath.row]
let tap = UITapGestureRecognizer(target: self, action: #selector(collectionViewTapped))
tap.numberOfTapsRequired = 1
cell.addGestureRecognizer(tap)
return cell
}
@objc func collectionViewTapped(sender: UITapGestureRecognizer) {
if let indexPath = self.collectionView?.indexPathForItem(at: sender.location(in: self.collectionView)) {
let cell : BroadcastCollectionViewCell = collectionView.cellForItem(at: indexPath)! as! BroadcastCollectionViewCell
print("item index")
} else {
print("collection view was tapped")
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("selected row is",indexPath.row)
}
Ich verstehe wirklich nicht, warum die Delegatmethoden nicht genannt wenn ich die collectionView.delegate und dataSource auf die Klasse BroadcastCollactionView
gesetzt habe. Bitte lassen Sie mich nicht erklären, warum ich dieses CollectionView
trennen möchte, es ist nicht Teil der Frage.
Stellen Sie sicher, dass Outlets von collectionView korrekt verbunden sind und delegate und dataSource nicht vom Storyboard aus verknüpft sind. –
Ja, ja, ich habe es bereits überprüft, und der Delegat und die Datenquelle sind nicht mit Anyith verbunden. Wenn ich es also in der 'viewDidLoad' Methode überschreibe, sollte es die geschriebene Klasse sein. –
Können Sie nach dem Zuweisen von Datenquelle und Delegat ans collectionView überprüfen, was der Wert von collectionView.delegate und collectionView.dataSource ist. –