如何以编程方式选择collectionview中的项目?

时间:2014-02-07 23:05:07

标签: ios iphone uicollectionview uicollectionviewcell

我有UICollectionViewUICollectionView的{​​{1}}是datasource名学生(来自NSArray)。我希望当前的学生项目为CoreData / selected

我该怎么做?我知道有一种方法:

highlighted

- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition; NSIndexPath作为参数。

我有UICollectionViewScrollPosition填充的学生的数据源(NSArray),学生对象为CoreData

那么,我该如何获得selectedNSIndexPath? 或者有没有其他方法来突出显示项目?

7 个答案:

答案 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()
        }
    }
}

有了这个,就无需处理didSelectdidDeselect或检查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)