web-dev-qa-db-ja.com

UICollectionViewは単一のセルを更新します

UICollectionView内の単一のセルを更新しようとしています。具体的には、cell.imageViewによって爆発した特定のセルの画像を更新しようとしています。 [self.collectionView reloadData]は、コレクションビュー全体をフラッシュするため、実際にはオプションではありません。 [self.collectionView beginUpdates]UICollectionViewにあるものではないようです。

使用できる可能性があることを理解しています:

[self.collectionView performBatchUpdates:^{
    //do something
} completion:nil];

特定のセルのimageViewを更新するために、完了ブロック内に何を入れるべきか正確にはわかりません。これはすべてdidSelectItemAtIndexPath内で行われます。また、NSFetchedResultsControllerを使用していません。何か案は?

53

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths

これは、特定のindexPathscollectionViewにリロードするメソッドです

75
Dinesh Raja

Dineshの答えはスポットオンです。ただし、リロード(別名「フラッシュ」)時に不要なアニメーションを回避するには、以下を使用します。

BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[myCollectionView reloadItemsAtIndexPaths:myIndexPaths];
[UIView setAnimationsEnabled:animationsEnabled];
40
gavdotnet

「iOSのコレクションビュープログラミングガイド」の セクションとアイテムの挿入、削除、移動 を参照してください。

単一のセクションまたはアイテムを挿入、削除、または移動するには、次の手順を実行する必要があります。


データソースオブジェクトのデータを更新します。コレクションビューの適切なメソッドを呼び出して、セクションまたはアイテムを挿入または削除します。変更をコレクションビューに通知する前に、データソースを更新することが重要です。コレクションビューメソッドは、データソースに現在正しいデータが含まれていることを前提としています。そうでない場合、コレクションビューはデータソースから間違ったアイテムセットを受け取るか、存在しないアイテムを要求してアプリをクラッシュさせる可能性があります。


したがって、あなたのケースでは、最初に画像をコレクションビューデータソースに追加してから、insertItemsAtIndexPathsを呼び出す必要があります。コレクションビューは、データソースデリゲート関数に、挿入されたアイテムのビューを提供するように要求します。

4
Vizllx