web-dev-qa-db-ja.com

iOS:UICollectionViewの単一セルをリロードします

UICollectionViewでセルをリロードする次の投稿に従おうとしています。

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

私は最終的に次のようなものが欲しいことを知っています:

[self.collectionView reloadItemsAtIndexPaths:??];

しかし、特定のセルのindexPathを見つけて渡す方法がわかりません。誰かがポインタを提供できますか?

すべてのセル情報(各セルで生成されるimageViews)を含むNSMutableArrayがあります。理想的には、NSMutableArrayのインデックスを渡して、ページ上の対応するセルを更新することです。しかし、数値インデックスがどのようにindexPathに変換されるのかわかりません。

よろしくお願いします!

10
scientiffic

実装とセルをセクションにグループ化する方法によって異なりますが、セクションが1つあり、配列の各要素がテーブルの行に対応していると仮定します。

インデックスxの配列要素に対応するセルをリロードしたい場合は、書き込むだけです。

[_collectionView performBatchUpdates:^{
    [_collectionView reloadItemsAtIndexPaths:@[[NSIndexPath x inSection:0]]];
} completion:^(BOOL finished) {}];

逆に、セルはあるがそのインデックスパスを見つけたい場合は、いつでも[collectionView indexPathForCell:myCell]を呼び出すことができます。

20
Daniel Galasko

おもちゃは、リロードするindexPathsを含む配列を渡す必要があります。

[self.collectionView reloadItemsAtIndexPaths: indexpathArray];

NSIndexPathには、セクションと行のプロパティ名がいくつかあり、どちらもセルを表します。コレクションビューに単一のセクションがある場合は、そのセクションを0に設定することでNSIndexPathを作成できます。

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowIndex inSection:0];

ここで、rowIndexは配列インデックスです。ところで、新しく作成したインデックスパスを使用して配列を作成し、それをreloadItemsAtIndexPathsに渡す必要があります。

お役に立てれば.. :)

8
Rashad

Obj-C

NSMutableArray *indexPaths = [[NSMutableArray alloc] init]    
[indexPaths addObject:indexPath];
[self.collectionView reloadItemsAtIndexPaths: indexPaths];

Swift 4.

var indexPaths = [IndexPath]()
indexPaths.append(indexPath) 

if let collectionView = collectionView {
    collectionView.reloadItemsAtIndexPaths(indexPaths)
}
2
Ashish