【发布时间】:2019-02-04 19:19:12
【问题描述】:
我有一个带有 CollectionView 的 ViewController,并且想将 UICollectionViewDataSource 放在一个额外的类中,以便可以重用它。 (我没有使用界面生成器)。
因此,我创建了一个额外的类:
class MyDataSource: NSObject, UICollectionViewDelegate, UICollectionViewDataSource {
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
public func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MYIDENTIFIER", for: indexPath)
cell.backgroundColor = .blue
return cell
}
}
在带有 CollectionView 的 ViewController 中,我设置了它:
override func viewDidLoad() {
super.viewDidLoad()
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "MYIDENTIFIER")
let myDataSource = MyDataSource()
collectionView.delegate = myDataSource
collectionView.dataSource = myDataSource
}
但是,collectionView 将保持为空 - 上面没有单元格。
但是,如果我将所有 DataSource 函数放入 ViewController 类本身并将委托和 DataSource 设置为 self,那么一切正常。
是否不能将 UICollectionViewDataSource 外包到其他文件中,或者您还有什么需要做的吗?
【问题讨论】:
-
我认为你必须用collectionView初始化数据源。在你的 dataSource 类中创建一个
init(collectionView: UICollectionView)init -
@GaloTorresSevilla 它应该如何提供帮助?
-
@AndreyChernukha 它将使用 collectionView 初始化数据源。然后在 dataSource 类中设置
collectionView.dataSource = self。我就是这样做的,而且效果很好。 -
@GaloTorresSevilla 所做的与您的建议之间的实际区别是什么?无论哪种方式,集合视图都接收数据源
-
真的不确定。这就是为什么我说我认为。我会试着找出答案
标签: ios swift uicollectionview uikit