2017-04-14 68 views
2

我對UICollectionView進行了子類化,並處理其dataSource。在CollectionView的init階段,我將dataSource指定爲selfCollectionView數據源在使用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:當我使用CollectionViewSubclassUIViewController,一切運作良好,雙方dataSource方法(numberOfItemsInSectioncellForItemAt正確稱爲
  • 案例2:當我使用CollectionViewSubclassUICollectionViewController ,由於某種原因,dataSource方法不被調用,雖然當我調試時,我檢查init(coder:)確實被調用,dataSource = self被執行。但似乎在某種程度上,dataSource得到nil再次在一個la ter階段,所以dataSource方法不被調用。

我不能得到我的頭,我試圖調試,但無濟於事。任何幫助告訴我的理由,或給我想法調試,讚賞。謝謝!

編輯:當我在init階段後分配dataSource = self時,一切正常。但我寧願在init階段這樣做。我如何在init期間使其工作?

回答

1

UICollectionViewConrtollerdocs

當加載從故事板或筆尖文件的集合視圖,爲集合視圖中的數據源和委託對象從筆尖文件中獲得。如果未指定數據源或委託,則集合視圖控制器將自己分配給未指定的角色

因此,如果您使用UICollectionViewConrtoller,則需要將dataSource重新分配給您的自定義集合視圖。

+0

非常好的捕獲在文檔中。但我正在將dataSource分配給我的自定義collectionView,如上所見。我錯過了什麼?我想我是在錯誤的地方做的?在初始階段,我可以在哪裏做到這一點?因爲這是事實,當我在稍後階段完成任務時,它運行良好,但我想在初始化階段分配數據源 –

+0

當您使用'UICollectionViewConrtoller'時會發生什麼情況:** 1。**視圖控制器被初始化。 ** 2。**您的自定義集合視圖被初始化(此時'dataSource'是您的集合視圖。** 3。**集合視圖被分配給視圖控制器 - 此時視圖控制器接管'dataSource'。 – njuri

+0

我的想法是,你想在init階段分配數據源,但這不是一個好的做法,有一個配置自己的視圖,主要的視圖任務是*顯示*信息和發送用戶事件。 - 配置視圖並作爲代表和/或數據源。 – njuri

相關問題