2017-08-09 2 views
0

UICollectionViewですべての商品を取りたいと思っています。iOSでUICollectionViewのすべての項目を取得することは可能ですか?

私は以下のコードを書いていますが、私が望むように動作していません。私のCollectionViewには6つの項目がありますが、そのうち4つしか表示されていません。どのように私の義務を修正する必要がありますか?

for(NSIndexPath *indexPath in self.viewCollection.indexPathsForVisibleItems) { 
    // for(imgCount in self.viewCollection.numberOfSections) { 
    //  NSIndexPath *indexPath = self.viewCollection.indexPathsForVisibleItems; 
      // Get selected cell 
      MYCell* cell = (MYCell*) [_viewCollection cellForItemAtIndexPath:indexPath]; 
      if(cell.checked == YES) { 
       imgCount = imgCount + 1; 

       NSString *imgName = [directoryContent objectAtIndex:indexPath.item]; 
       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
       NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", imgName]]; 
       NSData *imgFile = [NSData dataWithContentsOfFile:filePath]; 

       if(imgCount == 1) { 
        [IMGDATA_grid appendString:[imgFile base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength]]; 
       } 
       else { 
        [IMGDATA_grid appendString:@","]; 
        mTempData = [imgFile base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength]; 
        [IMGDATA_grid appendString:mTempData]; 
       } 
      } 
    } 
+4

すでにコレクションビューのデータソースにすべてのデータがあります。アイテムを反復処理する必要はありません。 – rmaddy

+0

コレクションビューは、画面全体を満たすのに十分なセルを作成します。ユーザがスクロールすると、コレクションビューは画面の一方の端で消えた項目を取り、画面のもう一方の端でそれらを再利用します。なぜなら 'collectionView.dequeueReusableCell(...) 'を使ってセルを作成するのです。 – Palle

+0

セルはモデルのデータを表示するだけのものです。セルからではなく、モデルからデータを取得します。 – Paulw11

答えて

0

方法のCollectionViews(およびTableViewsなど)の仕事は、あなたが、あなたのコード内の構造から、彼らに最も可能性が高いたNSArrayやNSMutableArrayのデータを渡すことです。ここでデータを保管します。あなたはUI要素自体ではなく、他の場所であなたのコード内のデータにアクセスするデータ構造を直接参照する必要がある場合は、アレイ内の

入れデータは=>あなたのCollectionViewアクセスデータ=>表示UI

をしましょう特に、メモリを節約するためにシステムによって細胞を除去することができるからである。

タイトルがUICollectionViewCellの行47であることを知りたい場合は、セル47に移動してタイトルを尋ねる必要はなく、

のようなデータ構造を直接参照する必要はありません
NSString * title = myDataArray[47]; 
0

こんにちは私はあなたのコレクションビューのアルゴリズムについて考えています。つまり、 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPathメソッドを使用すると、配列やモデルなどのセルで使用するデータを保持する必要があります。あなたが表示できるおそらく4つのアイテムは、scrollDidLoadの後ろにスクロールアクションなしで描画されます。コレクションビューで3つのセルを同じオフセットで使用すると、問題なくすべてのアイテムを取得できます。私は私が正しくあなたの問題を理解することを願っコレクションビューで

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 

NSString *strInArray = [array objectAtIndex:indexPath.row];} 

を任意の項目を選択する

NSArray *array = [NSArray arrayWithObjects:@"String1",@"String2",@"String3","String4",@"String5",@"String6",nil]; 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
CustomCollectionViewCell *cell = (CustomCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCollectionViewCell" forIndexPath:indexPath]; 

if (cell == nil) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCollectionViewCell" owner:self options:nil]; 
    cell = [nib objectAtIndex:0]; 
} 

[cell setupCellWithString:[array objectAtIndex:indexPath.row]]; 

return cell;} 

何を意味するかについての小さなコード。がんばろう。ところで、collectionview.indexPathsForVisibleItemsは、collectionviewに描画されて表示されるアイテムを表します。

関連する問題