3

UICollectionView内の場所を変更した後、セルの状態または順序をUICollectionViewに保存しようとしています。indexPathsForVisibleItemsを使用すると、常に同じ順序のインデックスが取得されます。注文の変更は反映されません。各indexPathでオブジェクトを取得できれば、少なくともオブジェクトを反復処理して、結果の順序を取得することができます。

このコードを使用しました。そして、[0,0]のindexPathsの更新された状態を返すことがわかりました。各セルにあるものではなく、どのセルに何かがあるかを教えてくれるので、順序は常に同じです。各セルのオブジェクト/アイテムの取得を開始するのに十分な場所や場所がわかりません。

NSArray *visible = [self.collectionView indexPathsForVisibleItems];
NSMutableArray *rowsArray = [NSMutableArray arrayWithCapacity:[visible count]];
[visible enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) {
    [rowsArray addObject:@(indexPath.item)];

それぞれの場所にアイテムやオブジェクトが必要です。すべてのセルの場所を反復処理して、そこにあるアイテムを取得するにはどうすればよいですか。UICollectionViewにデータを入力するために使用される配列の数を使用して、すべての場所をループし、そこにオブジェクトを格納することを計画しています。セクションは1つだけで、セルにはこのようなオブジェクトが格納されているようです<Slide: 0x7585200>

上記の関数は、この形式でNSLogsを返します"<NSIndexPath 0x8490390> 2 indexes [0, 0]"

その場所にあるものを取得する必要があります。

NSIndexPathまたはそのフォーマットに精通していません。コマンド/関数だけでも、オブジェクトを取り出すのに役立ちます。ありがとう。

(補遺)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];何に保存できるかわからないようなものを使うことを考えています。

4

1 に答える 1

4

CollectionViewは、UIViewのコレクションです(UICollectionViewCellを呼び出します)。各セルには、collectionViewコンテンツのレイアウト位置を意味するindexPath(section、row)があります。セクションが1つある場合、セクションは常に=0です。

visibleCellsは、その時点で画面に表示されているすべてのセルを意味します(スクロールフレームまたはcollectionViewフレームに表示されます)。indexPathsForVisibleItems=visibleCellsのindexPath配列

cellForItemAtIndexPathは、任意のindexPathでcollectionViewCellを取得するためのメソッドであり、多くの場合、選択時にセルを取得するために使用されます。

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
    NSLog(@"%@",cell);
}

Apple UICollectionViewのビデオと例から詳細を調べてください: https ://developer.apple.com/library/ios/#samplecode/CollectionView-Simple/Introduction/Intro.html

https://developer.apple.com/videos/wwdc/2012/

于 2013-02-20T19:44:31.227 に答える