2014-04-02 39 views
1

我在我的UIViewController中有兩個UICollectionViewsUICollectionView CellForItemAtIndexPath沒有被調用

假設它們是A和B,A和B位於UIViewcontroller中nib文件中的相同位置,它們具有完全相同的大小。

現在我在ViewDidLoad

設置

A.delegate = self; 
A.dataSource = self; 

B.delegate = self; 
B.dataSource = self; 

[A registerNib:nib forCellWithReuseIdentifier:CELL_A]; 

[B registerNib:nib forCellWithReuseIdentifier:CELL_B]; 

然後在CellForItemAtIndexPath

我用switch語句來顯示不同的細胞。

然後我使用段控制來控制在我選擇的段上顯示正確的UICollectionViewcontroller

在段控制值更改代碼。我使用:正確顯示

- (IBAction)sectionSelected:(id)sender { 
    if (choosing A) { 
     B.hidden = YES; 
     A.hidden = NO; 
     A.backgroundColor = [UIColor blackColor]; 
     [self getAData]; 
     [A reloadData]; 
    } 
    else if (choosing B) { 
     A.hidden = YES; 
     B.hidden = NO; 
     B.backgroundColor = [UIColor orangeColor]; 
     [self getBData]; 
     [B reloadData]; 
    } 
} 

阿當我設置默認選擇的段爲A.但是當我切換到B,I可以看到B是負載,但數據不加載到B,所以我不能看到除了橙色背景之外的任何東西。我把NSLog放入CellForItemAtIndexPath,發現在reloadData之後沒有調用該方法。

下面是一些記錄我得到A.collectionViewLayout.collectionViewContentSize;B.collectionViewLayout.collectionViewContentSize;

content size of B = 768.000000, 24.000000 
content size of A = 768.000000, 880.000000 

當我設置默認選定段B,B正確顯示。我切換回A,這也正確顯示。但是,當我再次切換回B時,它會顯示一個空的橙色屏幕。任何想法我的代碼出了什麼問題?

回答

2

this answer

變化

[A reloadData]/ [B reloadData] 

到:

[self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]]; 
    [self.collectionView reloadData]; 
+1

不幸的是,這並不能幫助我。運行期間,我在 - [UICollectionView _endItemAnimations]中出現斷言失敗。 – newguy

1

也許你已經失去了你的數組對象的項目,您使用重新加載的數據/創建集合視圖細胞。仔細檢查陣列/數據。

0

您的getAData/getBData是異步調用嗎?您可能會遇到數據尚未準備好的爭用情況,因此當您調用reloadData時,集合視圖創建的單元格數量爲0.這也將解釋內容大小中的較小高度。

相關問題