CollectionView 数据源在使用 UICollectionViewController 时不起作用,但在将



我正在子类化UICollectionView,并照顾它的dataSource。我在 CollectionView 的init阶段将dataSource分配给self

import Foundation
import UIKit
class CollectionViewSubclass: UICollectionView, UICollectionViewDataSource {
public override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
dataSource = self
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
dataSource = self
}
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// This is called for the first case, but not the second
return 1
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// This is called for the first case, but not the second
return UICollectionViewCell()
}
}
  • 情况 1:当我在UIViewController中使用CollectionViewSubclass时,一切正常,dataSource方法(numberOfItemsInSectioncellForItemAt都正确调用。
  • 情况2:当我在UICollectionViewController中使用CollectionViewSubclass时,由于某种原因,没有调用dataSource方法,尽管在调试时,我检查了init(coder:)确实被调用并且dataSource = self被执行。但似乎不知何故,数据源在稍后阶段再次nil,因此没有调用dataSource方法。

我无法解决这个问题,我试图调试,但无济于事。任何帮助告诉我原因,或给我调试的想法,这是值得赞赏的。谢谢!

编辑:当我在init阶段后分配dataSource = self时,一切正常。但我宁愿在init阶段这样做。如何在init期间使其工作?

来自UICollectionViewConrtoller文档:

从情节提要或 nib 文件加载集合视图时,将从 nib 文件中获取集合视图的数据源和委托对象。如果未指定数据源或委托,则集合视图控制器会将自身分配给未指定的角色。

因此,如果使用UICollectionViewConrtoller则需要将 dataSource 重新分配给自定义集合视图。

最新更新