我有UICollectionView
。 UICollectionView
的{{1}}是datasource
名学生(来自NSArray
)。我希望当前的学生项目为CoreData
/ selected
。
我该怎么做?我知道有一种方法:
highlighted
将- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath
animated:(BOOL)animated
scrollPosition:(UICollectionViewScrollPosition)scrollPosition;
和NSIndexPath
作为参数。
我有UICollectionViewScrollPosition
填充的学生的数据源(NSArray
),学生对象为CoreData
。
那么,我该如何获得selected
和NSIndexPath
?
或者有没有其他方法来突出显示项目?
答案 0 :(得分:24)
您可以在[self.collectionView reloadData]
[self.collectionView
selectItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]
animated:YES
scrollPosition:UICollectionViewScrollPositionCenteredVertically];
其中index
是所选学生的索引号。
答案 1 :(得分:11)
<强>夫特强>
let indexPath = self.collectionView.indexPathsForSelectedItems?.last ?? IndexPath(item: 0, section: 0)
self.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: UICollectionView.ScrollPosition.centeredHorizontally)
答案 2 :(得分:5)
从你的问题我假设你只有一个选定的学生,我用一组用户可以选择的图标做了类似的事情。 首先,我做了加载:
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
中的选定对象,单元格会自动执行此操作。
答案 3 :(得分:2)
我知道超级晚了,但仅出于记录目的,针对y部分中的x:
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:x inSection:y];
如果只想以编程方式突出显示某个项目,则需要在集合视图本身上调用selectItemAtIndexPath方法,例如:
[theCollectionView selectItemAtIndexPath:indexPath
animated:YES scrollPosition:UICollectionViewScrollPositionCenteredVertically];
如果要模拟编程选择项目,并且获得调用select的代码,则需要在视图控制器本身上调用selectItemAtIndexPath方法,并将其作为参数传递给集合视图:
[theViewController collectionView:theCollectionView didSelectItemAtIndexPath:indexPath];
现在可以肯定的是,为了选择一个项目并调用选择的代码,您需要同时调用:D
[theCollectionView selectItemAtIndexPath:indexPath
animated:YES scrollPosition:UICollectionViewScrollPositionCenteredVertically];
[theViewController collectionView:theCollectionView didSelectItemAtIndexPath:indexPath];
SWIFT版本:
let indexPath = IndexPath(item: x, section: y)
theCollectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredVertically)
theViewController.collectionView(theCollectionView, didSelectItemAt: indexPath)
享受!
答案 4 :(得分:1)
签名已更改。
didSelectItemAtIndexPath to didSelectItemAt
请检查此内容
_ collectionView
请尝试以下操作:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
print(" selected",)
}
答案 5 :(得分:0)
使用 Swift:
您可以简单地执行此操作来获取collectiveView 的索引并使用该键从您的数组中获取数据
collectionView.indexPathsForSelectedItems?.last?.row
这会以整数形式为您提供所选项目的索引
答案 6 :(得分:0)
SWIFT 5
collView.selectItem(at: NSIndexPath(item: 0, section: 0) as IndexPath, animated: false, scrollPosition: .centeredHorizontally)