2
我對UICollectionView
進行了子類化,並處理其dataSource
。在CollectionView的init
階段,我將dataSource
指定爲self
。CollectionView數據源在使用UICollectionViewController時不起作用,但在使用UIViewController和CollectionView時起作用
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:當我使用
CollectionViewSubclass
內UIViewController
,一切運作良好,雙方dataSource
方法(numberOfItemsInSection
和cellForItemAt
正確稱爲 - 案例2:當我使用
CollectionViewSubclass
內UICollectionViewController
,由於某種原因,dataSource
方法不被調用,雖然當我調試時,我檢查init(coder:)
確實被調用,dataSource = self
被執行。但似乎在某種程度上,dataSource得到nil
再次在一個la ter階段,所以dataSource
方法不被調用。
我不能得到我的頭,我試圖調試,但無濟於事。任何幫助告訴我的理由,或給我想法調試,讚賞。謝謝!
編輯:當我在init
階段後分配dataSource = self
時,一切正常。但我寧願在init
階段這樣做。我如何在init
期間使其工作?
非常好的捕獲在文檔中。但我正在將dataSource分配給我的自定義collectionView,如上所見。我錯過了什麼?我想我是在錯誤的地方做的?在初始階段,我可以在哪裏做到這一點?因爲這是事實,當我在稍後階段完成任務時,它運行良好,但我想在初始化階段分配數據源 –
當您使用'UICollectionViewConrtoller'時會發生什麼情況:** 1。**視圖控制器被初始化。 ** 2。**您的自定義集合視圖被初始化(此時'dataSource'是您的集合視圖。** 3。**集合視圖被分配給視圖控制器 - 此時視圖控制器接管'dataSource'。 – njuri
我的想法是,你想在init階段分配數據源,但這不是一個好的做法,有一個配置自己的視圖,主要的視圖任務是*顯示*信息和發送用戶事件。 - 配置視圖並作爲代表和/或數據源。 – njuri