web-dev-qa-db-ja.com

UICollectionViewが最初にロードされた後にいくつかのアイテムを選択するにはどうすればよいですか?

書いてみました

_[self collectionView:myCollectionView didSelectItemAtIndexPath:selectedIndexPath]_

そして、viewDidLoadでUICollectionViewCellのselected = YESであり、メソッドdidSelectItemAtIndexPathを実装しましたが、セルは選択されていません。

選択した状態をUICollectionViewCellサブクラスの_(void)setSelected:(BOOL)selected_に書き込みました。ビューがロードされた後、手動選択機能が機能します。しかし、ビューが最初に読み込まれた後、一部のアイテムを自動選択させることができませんでした。

そして私はコードを書こうとしました:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

そして

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath、すべてOKではありません。

最初にviewDidLoaddidSelectItemAtIndexPathを実行し、次にcellForItemAtIndexPathを実行したので、indexPath(私が知っている)のセルを取得できなかったようです。 )cellForItemAtIndexPathの前。その前は、セルが存在しないためです。では、最初にロードした後、UICollectionViewでいくつかのアイテムを選択するにはどうすればよいですか?

英語が下手でごめんなさい。前もって感謝します。

13
zgjie

質問が正しければわかりませんが、考えられる解決策は次のとおりです。

例: viewWillAppear: 行う

[self.collectionView reloadData];
NSIndexPath *selection = [NSIndexPath indexPathForItem:THE_ITEM_TO_SELECT 
                                             inSection:THE_SECTION];
[self.collectionView selectItemAtIndexPath:selection 
                                  animated:YES 
                            scrollPosition:UICollectionViewScrollPositionNone];

'selectItemAtIndexPath'をプログラムで呼び出すと、関連するデリゲートメソッドが呼び出されないことに注意してください。必要に応じて、コードで呼び出す必要があります。

11
SAE

私の場合、selectItemAtIndexPathreloadDataの後に効果がなかったので、performBatchUpdatesの完了ブロックで呼び出す必要がありました。

collectionView.dataSource = ...
collectionView.delegate = ...

let indexPath = ...

collectionView.performBatchUpdates(nil) { _ in
  collectionView.selectItemAtIndexPath(indexPath, animated: false, scrollPosition: .None)
}
9

スウィフト3

コレクションビューが作成される場所にこのオーバーライド関数を実装します。 Instagramのストーリーのように1つのセクション1行があると仮定します。

 override func viewDidAppear(_ animated: Bool) {
        // Auto Select First Item
        self.myCollectionView.performBatchUpdates(nil) { _ in
            self.myCollectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: false, scrollPosition: [.centeredHorizontally])
            self.collectionView(self.myCollectionView, didSelectItemAt : IndexPath(item: 0, section: 0))
        }
    }
5
Onur Erkan