UICollectionView
があります。 UICollectionView
のdatasource
は、_NSArray
からの学生のCoreData
です。現在の学生アイテムをselected
/highlighted
にする必要があります。
これどうやってするの?私は方法があることを知っています:
- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath
animated:(BOOL)animated
scrollPosition:(UICollectionViewScrollPosition)scrollPosition;
NSIndexPath
およびUICollectionViewScrollPosition
を引数として取ります。
データソース(NSArray
から移入された学生のCoreData
)と、selected
である学生オブジェクトがあります。
それで、どのようにしてNSIndexPath
とUICollectionViewScrollPosition
を取得しますか?または、アイテムを強調表示する他の方法はありますか?
[self.collectionView reloadData]
の後に単にこれを使用できます
[self.collectionView
selectItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]
animated:YES
scrollPosition:UICollectionViewScrollPositionCenteredVertically];
ここで、index
は、選択した生徒のインデックス番号です。
スイフト
let indexPath = self.collectionView.indexPathsForSelectedItems?.last ?? IndexPath(item: 0, section: 0)
self.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: UICollectionView.ScrollPosition.centeredHorizontally)
あなたの質問から、選択した学生が1人だけだと仮定していますが、ユーザーが選択できるアイコンのコレクションを使用して同様のことを行いました。まず、私がやったロードで見ました:
override func viewDidLoad() {
super.viewDidLoad()
iconCollectionView.delegate = self
iconCollectionView.dataSource = self
iconCollectionView.allowsMultipleSelection = false
iconCollectionView.selectItemAtIndexPath(NSIndexPath(forItem: 0, inSection: 0), animated: false, scrollPosition: .None)
}
ここでは、デフォルトで最初のセルを選択します。StudentArray.indexOf
選択した学生インデックスを取得します。次に、選択されたアイテムを表示するために、私がやった:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = iconCollectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! IconCollectionViewCell
cell.imageView.image = UIImage(named: imageResourceNames.pngImageNames[indexPath.row])
if cell.selected {
cell.backgroundColor = UIColor.grayColor()
}
return cell
}
これは、コレクションが最初に表示されたときに呼び出され、選択の変更に反応します。
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
collectionView.cellForItemAtIndexPath(indexPath)?.backgroundColor = UIColor.grayColor()
}
func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {
collectionView.cellForItemAtIndexPath(indexPath)?.backgroundColor = UIColor.clearColor()
}
セルの選択を表示する方法はたくさんあります。私の方法は簡単ですが、それだけで十分です。
編集:上記を投稿してから、セルクラスのselected
にオブザーバーを追加する方が簡単だとわかりました。
class IconCollectionViewCell: UICollectionViewCell {
...
override var selected: Bool {
didSet {
backgroundColor = selected ? UIColor.grayColor() : UIColor.clearColor()
}
}
}
これを適切に配置すると、didSelect
またはdidDeselect
を処理したり、cellForItemAtIndexPath
で選択されていることを確認したりする必要がなくなり、セルが自動的に処理します。
let indexPathForFirstRow = IndexPath(row: 0, section: 0)
paymentHeaderCollectionView.selectItem(at: indexPathForFirstRow, animated: false, scrollPosition: UICollectionViewScrollPosition.left)
self.collectionView(paymentHeaderCollectionView, didSelectItemAt: indexPathForFirstRow)