2014-03-04 60 views
2

我正在實施一個UICollectionView,通過Parse從在線獲取其數據。我正在將圖像加載到集合視圖中。我遇到的問題是,在重新加載單元格之前,調用collection視圖的一個委託方法會被調用。UICollectionView在實例化單元之前調用委託方法?

我有一個將背景中的對象加載到NSArray中的方法。一旦完成,我重新加載我的收藏視圖。從那裏我的代表方法被稱爲collectionView:cellForItemAtIndexPath之前。我的委託方法處理每個單獨單元格的大小,以便它們可以根據照片的大小進行更改。

這是一個問題,因爲單元格需要在它們中有圖像,以便我能夠看到它們代表方法的大小。

我的委託方法是這樣的:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(NHBalancedFlowLayout *)collectionViewLayout preferredSizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCollectionViewCell *currentCell = (CustomCollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath]; 

    if (currentCell) { 
     return [currentCell.cellImage.image size]; 
    } 
    return [cellImage size]; 
} 

就像我說的,此委託方法被collectionView:cellForItemAtIndexPath之前調用。這導致局部變量'currentCell'返回零。我可以做什麼,以便我可以正確地設置這個,所以我的所有細胞都加載後,我打電話給代表?

回答

1

我與解析表視圖可能有此相同。關於如何解析集合和表視圖設置其維度,您絕對正確。您可以通過在上傳圖片時保存圖片的寬度和高度來解決問題。這樣,您就可以在之前抓取圖像的尺寸,PFFile圖像完成下載(這通常發生在收集視圖設置後)。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    MyParseImage *image = [self.objects objectAtIndex:indexPath.row]; 
    CGFloat imageHeight = [[image objectForKey:height] floatValue]; 
    CGFloat imageWidth = [[image objectForKey:width] floatValue]; 
    CGFloat ratio = self.view.frame.size.width/imageWidth; 

    return imageHeight * ratio; 
} 
+0

非常感謝大家回來!你是如何在Parse上保存圖像尺寸的?你可以將它保存爲CGSize對象,還是單獨保存高度/寬度? – Jonathan

+0

是的,我將寬度和高度單獨保存爲NSNumber對象。它希望看看'[myParseImage setObject:imageWidth forKey:width]'然後像往常一樣用'[myParseImage saveInBackground]'保存它。 –

+0

我其實還有一個問題。問題是,爲了從PFFile中檢索圖像,您必須通過塊加載它。一旦該塊被加載,我可以訪問該圖像。從那裏我可以得到寬度/高度。問題是你不能從塊中返回一個值。有任何想法嗎? – Jonathan

相關問題