如何获取当前单元格的indexPath

5

我目前正在尝试创建一种方法,以删除集合视图中1个后面的indexPath处的项目。到目前为止,我已经使用了一些帮助来创建一个使用滚动视图did scroll函数的方法,通过当前图像方法计算用户所在的图像。现在我需要一种方法来计算用户所在的单元格。以下是我的代码>

 var currentImage = 0
   func scrollViewDidScroll(_ scrollView: UIScrollView) {
let x = floor(myCollectionView.contentOffset.x / view.frame.width)
if Int(x) != currentImage {
    currentImage = Int(x)
    //print(currentImage)
}
if currentImage > 0 {
                for collectionCell in myCollectionView.visibleCells  as [UICollectionViewCell]    {
        let indexPath = myCollectionView.indexPath(for: collectionCell as UICollectionViewCell)!
       let indexPathOfLastItem = (indexPath?.item)! - 1
            let indexPathOfItemToDelete = IndexPath(item: (indexPathOfLastItem), section: 0)
            imageArray.remove(at: 0)
            myCollectionView.deleteItems(at: [indexPathOfItemToDelete])
            currentImage =  1

根据我的回答下面的评论,你的问题并不是你应该问的。为什么不更新你的问题,让它成为真正的问题——如何获取当前单元格的索引路径,以便可以删除它。在你的问题中更清楚地说明这一点。包括相关的展示,显示你需要做出这个决定的地方。你真正想要的与在scrollViewDidScroll方法中打印可见单元格没有任何关系。 - rmaddy
老实说,我以为要删除集合视图中的项目(1个项目返回),需要通过将内容大小除以宽度来获得项目的indexPath,并告诉用户正在使用哪个图像。 - Nivix
是的,你确实需要索引路径。请再次阅读我的评论,并相应更新你的问题。到目前为止,你只更新了标题。你需要重新制定整个问题。你当前问题的大部分内容与你真正想要做的事情无关。 - rmaddy
好的,我已经适当地编辑了我的问题。 - Nivix
再次强调,您的问题与滚动或scrollViewDidScroll委托方法无关。您实际上想在哪个方法中删除单元格并确定其索引路径? - rmaddy
我真的希望你能回答我的问题,这样大家才能帮助你。再说一遍,你到底想在哪个方法中删除单元格并确定其索引路径?你不需要计算任何东西,也不需要担心滚动。告诉我们你想如何以及何时删除单元格就可以了。 - rmaddy
2个回答

6

根据评论,你似乎想要获取第一个可见单元格的索引路径,以便使用该路径删除该单元格。

let visibleCells = myCollectionView.visibleCells
if let firstCell = visibleCells.first() {
    if let indexPath = myCollectionView.indexPath(for: collectionCell as UICollectionViewCell) {
        // use indexPath to delete the cell
    }
}

scrollViewDidScroll 代理方法中不应使用或执行任何此操作。


哦,谢谢。我该如何避免这种情况,只打印可见单元格的indexPath呢? - Nivix
1
避免什么?你的目标不是很清楚。你的代码目前正在做你要求它做的事情——在用户滚动集合视图时打印所有可见单元格。 - rmaddy
1
“currently on”是什么意思?没有这样的概念。 - rmaddy
1
请问您所说的“currently on”是什么意思? - rmaddy
我非常感激这些人,我不知道scrollview只加载2个单元格。 - Nivix
显示剩余11条评论

4

[针对Swift 5.2进行更新] 这里提供一种比@rmaddy的答案稍微更为简洁的方式(不过那个方式也可以正常工作):

guard let indexPath = collectionView.indexPathsForVisibleItems.first else {
    return
}

// Do whatever with the index path here.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接