21

iOS アプリで CollectionView を使用しています。各コレクション セルには削除ボタンがあります。ボタンをクリックすると、セルが削除されます。削除後、そのスペースは下のセルで埋められます (CollectionView をリロードして上からやり直したくありません)

autolayout を使用して UICollectionView から特定のセルを削除するにはどうすればよいですか?

4

2 に答える 2

37

UICollectionViewは、削除後にセルをアニメーション化し、自動的に再配置します。

選択したアイテムをコレクション ビューから削除する

[self.collectionView performBatchUpdates:^{

    NSArray *selectedItemsIndexPaths = [self.collectionView indexPathsForSelectedItems];

    // Delete the items from the data source.
    [self deleteItemsFromDataSourceAtIndexPaths:selectedItemsIndexPaths];

    // Now delete the items from the collection view.
    [self.collectionView deleteItemsAtIndexPaths:selectedItemsIndexPaths]; 

} completion:nil];



// This method is for deleting the selected images from the data source array
-(void)deleteItemsFromDataSourceAtIndexPaths:(NSArray  *)itemPaths
{
    NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet];
    for (NSIndexPath *itemPath  in itemPaths) {
        [indexSet addIndex:itemPath.row];
    }
    [self.images removeObjectsAtIndexes:indexSet]; // self.images is my data source

}
于 2013-04-24T11:02:27.830 に答える
7

UITableviewController のように UICollectionViewController に提供されるデリゲート メソッドはありません。UICollectionView に長いジェスチャ認識エンジンを追加することで、手動で行うことができます。

 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self
                                                                                         action:@selector(activateDeletionMode:)];
 longPress.delegate = self;
 [collectionView addGestureRecognizer:longPress];

longGesture メソッドで、その特定のセルにボタンを追加します。

- (void)activateDeletionMode:(UILongPressGestureRecognizer *)gr
{
    if (gr.state == UIGestureRecognizerStateBegan) {
        if (!isDeleteActive) {
        NSIndexPath *indexPath = [collectionView indexPathForItemAtPoint:[gr locationInView:collectionView]];
        UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
        deletedIndexpath = indexPath.row;
        [cell addSubview:deleteButton];
        [deleteButton bringSubviewToFront:collectionView];
        }
     }
 }

そのボタンアクションでは、

- (void)delete:(UIButton *)sender
{
    [self.arrPhotos removeObjectAtIndex:deletedIndexpath];
    [deleteButton removeFromSuperview];
    [collectionView reloadData];
}

私はそれがあなたを助けることができると思います.

于 2013-04-24T11:00:13.320 に答える