UICollectionViewでセルをリロードする次の投稿に従おうとしています。
私は最終的に次のようなものが欲しいことを知っています:
[self.collectionView reloadItemsAtIndexPaths:??];
しかし、特定のセルのindexPathを見つけて渡す方法がわかりません。誰かがポインタを提供できますか?
すべてのセル情報(各セルで生成されるimageViews)を含むNSMutableArrayがあります。理想的には、NSMutableArrayのインデックスを渡して、ページ上の対応するセルを更新することです。しかし、数値インデックスがどのようにindexPathに変換されるのかわかりません。
よろしくお願いします!
実装とセルをセクションにグループ化する方法によって異なりますが、セクションが1つあり、配列の各要素がテーブルの行に対応していると仮定します。
インデックスx
の配列要素に対応するセルをリロードしたい場合は、書き込むだけです。
[_collectionView performBatchUpdates:^{
[_collectionView reloadItemsAtIndexPaths:@[[NSIndexPath x inSection:0]]];
} completion:^(BOOL finished) {}];
逆に、セルはあるがそのインデックスパスを見つけたい場合は、いつでも[collectionView indexPathForCell:myCell]
を呼び出すことができます。
おもちゃは、リロードするindexPathsを含む配列を渡す必要があります。
[self.collectionView reloadItemsAtIndexPaths: indexpathArray];
NSIndexPath
には、セクションと行のプロパティ名がいくつかあり、どちらもセルを表します。コレクションビューに単一のセクションがある場合は、そのセクションを0に設定することでNSIndexPath
を作成できます。
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowIndex inSection:0];
ここで、rowIndex
は配列インデックスです。ところで、新しく作成したインデックスパスを使用して配列を作成し、それをreloadItemsAtIndexPaths
に渡す必要があります。
お役に立てれば.. :)
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)
}