2012-12-17 85 views
6

在某些事件,如何刪除所有項目並將新項目添加到UICollectionView?

我想除去所有細胞在uicollectionview,並添加新的細胞。(將填充作爲網絡調用的結果)

我嘗試使用deleteItemsAtIndexPaths。 reloadSections,deleteSections/insertSections。

他們每個人都撞我的應用程序。

以下是我的代碼。

NSMutableArray* indexPathArray = [[NSMutableArray alloc] init]; 

for(int i=0; i < [self.jsonAlbumImageArray count]; ++i) 
{ 
    NSIndexPath* newPath = [NSIndexPath indexPathForRow:i inSection:0]; 
    [indexPathArray addObject: newPath]; 
} 

[self.jsonAlbumImageArray removeAllObjects]; 

if(indexPathArray.count > 0) 
{ 
    [self.collectionView performBatchUpdates:^{ 
      [self.collectionView deleteItemsAtIndexPaths:indexPathArray]; 
     } 
    completion: nil]; 
} 

// NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)];                                               
// NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:0];                                                     
// [self.collectionView reloadSections:indexSet];                                                       

[self get_IMAGE_LIST_FROM_SERVER]; 
+1

使用'[的CollectionView reloadData]' –

回答

4

呀,喬納森說,我想你想要做的是用新的數據改變你的數據源和簡單的「刷新」或重新加載UICollectionView。

+0

什麼,所以你說,如果你清楚你的數據完全源,並做了'''[的CollectionView reloadData]'''的應用程序不會崩潰,集合視圖會清除? – Supertecnoboff

+0

如果通過「清除你的數據源」,你的意思是使它成爲0計數對象,那麼是的,那正是會發生什麼事情。但是,如果您將其設置爲「無」,則可能會得到意想不到的結果,具體取決於您使用的是swift還是obj-c。 –

+1

真棒謝謝特拉維斯和是的,這就是我的意思:) – Supertecnoboff

6

萬一你需要一個比[collectionView reloadData]提供的動畫更流暢的動畫,你可以使用插入和刪除方法來做到這一點,下面是一個示例。

-(void)deleteItemsFromDataSourceAtIndexPaths:(NSArray *)itemPaths 
{ 
    NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; 
    for (NSIndexPath *itemPath in itemPaths) { 
     [indexSet addIndex:itemPath.row]; 
    } 
    [self.apps removeObjectsAtIndexes:indexSet]; 
} 

-(void)insertItems:(NSArray*)items ToDataSourceAtIndexPaths:(NSArray *)itemPaths 
{ 
    NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; 
    for (NSIndexPath *itemPath in itemPaths) { 
     [indexSet addIndex:itemPath.row]; 
    } 
    [self.apps insertObjects:items atIndexes:indexSet]; 
} 

-(void)reloadDataSmooth{ 
     [self.collectionView performBatchUpdates:^{ 

      NSMutableArray *arrayWithIndexPathsDelete = [NSMutableArray array]; 
      NSMutableArray *arrayWithIndexPathsInsert = [NSMutableArray array]; 

      int itemCount = [self.items count]; 

      for (int d = 0; d<itemCount; d++) { 
       [arrayWithIndexPathsDelete addObject:[NSIndexPath indexPathForRow:d inSection:0]]; 
      } 
      [self deleteItemsFromDataSourceAtIndexPaths:arrayWithIndexPathsDelete]; 
      [self.collectionView deleteItemsAtIndexPaths:arrayWithIndexPathsDelete]; 

      int newItemCount = [newItems count]; 

      for (int i=0; i<newAppCount; i++) { 
       [arrayWithIndexPathsInsert addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 
      } 
      [self insertItems:newItems ToDataSourceAtIndexPaths:arrayWithIndexPathsInsert]; 

      [self.collectionView insertItemsAtIndexPaths:arrayWithIndexPathsInsert]; 
     } 
     completion:nil]; 
    } 
} 
+1

什麼是'self.apps'在這裏? –

+0

@TejaswiYerukalapudi一個數組(可變)的CollectionCells – Emilio

相關問題