書いてみました
_[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ではありません。
最初にviewDidLoad
とdidSelectItemAtIndexPath
を実行し、次にcellForItemAtIndexPath
を実行したので、indexPath
(私が知っている)のセルを取得できなかったようです。 )cellForItemAtIndexPath
の前。その前は、セルが存在しないためです。では、最初にロードした後、UICollectionView
でいくつかのアイテムを選択するにはどうすればよいですか?
英語が下手でごめんなさい。前もって感謝します。
質問が正しければわかりませんが、考えられる解決策は次のとおりです。
例: viewWillAppear:
行う
[self.collectionView reloadData];
NSIndexPath *selection = [NSIndexPath indexPathForItem:THE_ITEM_TO_SELECT
inSection:THE_SECTION];
[self.collectionView selectItemAtIndexPath:selection
animated:YES
scrollPosition:UICollectionViewScrollPositionNone];
'selectItemAtIndexPath'をプログラムで呼び出すと、関連するデリゲートメソッドが呼び出されないことに注意してください。必要に応じて、コードで呼び出す必要があります。
私の場合、selectItemAtIndexPath
はreloadData
の後に効果がなかったので、performBatchUpdates
の完了ブロックで呼び出す必要がありました。
collectionView.dataSource = ...
collectionView.delegate = ...
let indexPath = ...
collectionView.performBatchUpdates(nil) { _ in
collectionView.selectItemAtIndexPath(indexPath, animated: false, scrollPosition: .None)
}
スウィフト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))
}
}