eug*_*ene 6 iphone ios 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];
Run Code Online (Sandbox Code Playgroud)
如果您需要比[collectionView reloadData]提供的动画更平滑的动画,您可以使用insert和delete方法来完成,这里有一个示例.
-(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];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15709 次 |
| 最近记录: |