2013-08-16 25 views
1

我的工作UICollectionView,有一個問題,即方法是如何/時:何時調用UICollectionView @required方法?

- (UICollectionViewCell *)collectionView:(UICollectionView *)asker 
        cellForItemAtIndexPath:(NSIndexPath *)indexPath; 

被調用。它所具有的參數是一個UICollectionView,它顯然是Controller的視圖中的CollectionView。我認爲的索引路徑只是已分配到CollectionView中的特定單元的索引。所以,我的問題是:

何時調用此方法?當我在UICollectionView中滾動時,它是否被調用,它需要填充項目?或者,當視圖被實例化時,它會調用它來填充它的CollectionView。

如果我在同一個視圖中有兩個UICollectionView,會發生什麼?我會用這個方法,只要致電:

- (UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)cell 
                forIndexPath:(NSIndexPath *)indexPath; 

兩倍的方法和國家兩個不同的重用標識符的範圍內,並利用他們,我多麼希望?

也像標題說的那樣,何時需要調用@required方法?他們是否都以這種方式被召喚?

非常感謝您的幫助!

回答

2

asker參數是其集合視圖,其delegate是您實現該方法的類。默認情況下,如果你已經在Xcode中創建了UICollectionViewController和關聯的xib,那麼它就是你視圖中的UICollectionView,並且已經設置了委託,就像你說的那樣。

只要收集視圖需要指定索引路徑的單元格,方法collectionView:cellForItemAtIndexPath:就會被調用。實際的實現是私有的,但我們可以推斷,只要它認爲一個單元即將變得可見,就會被調用(例如,因爲用戶正在滾動)。當然,當收集視圖第一次出現時,將會加載所有可見的單元格。

如果您有兩個具有相同代表的集合視圖,那麼您需要將asker參數與您的屬性/ ivars進行比較,以確定哪個集合視圖要求單元並適當地設置重用標識符。

+0

謝謝傑夫!當CollectionView首次出現在視圖中時,是否將所有方法作爲UICollectionViewDataSource協議的一部分運行?像方法的numberOfSectionInCollectionView和 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section? – Jonathan

+0

通常,是的。你可以放下一些日誌功能來自己測試。順序絕對是你期望的,例如numberOfSections後跟numberOfItemsInSection後跟cellForIndexPath等。我說「典型」是因爲單元格的渲染高度優化,只有在必要時纔會發生,如果你的視圖層次結構中有任何異常或者轉換它可能不會立即詢問單元格*,因爲它們無論如何都不可見。 – Jeff

相關問題