【问题标题】:How to get the indexPath of the current cell如何获取当前单元格的indexPath
【发布时间】:2017-03-28 00:05:01
【问题描述】:

我目前正在尝试创建一种方法来删除集合视图中位于 1 后面的 indexPath 的项目。到目前为止,我已经使用了一些帮助来创建一个带有 scrollview 的函数确实滚动以创建一种方法来计算当前图像方法用户在哪个图像上。我现在需要一种方法来计算用户在哪个单元格上。这是我的代码>

 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

【问题讨论】:

  • 根据我的回答下面的 cmets,你的问题根本不是你应该问的。为什么不将您的问题更新为真正的问题 - 如何获取当前单元格的索引路径以便将其删除。在你的问题中更清楚地说明这一点。包括相关显示您需要在哪里做出此决定。您真正想要的与在 scrollViewDidScroll 方法中打印可见单元格无关。
  • hmm 老实说,我想删除collectionview中的项目(返回1个项目)你需要通过将contentsize除以宽度来获得项目的indexPath,并告诉用户在哪个图像上。?
  • 是的,您确实需要索引路径。请再次阅读我的评论,并相应地更新您的问题。到目前为止,您只更新了标题。您需要重做整个问题。您当前的大部分问题与您真正想做的事情无关。
  • 好的,我已经按问题适当地编辑了
  • 再一次,您的问题与滚动或scrollViewDidScroll 委托方法无关。您实际上想通过哪种方法删除单元格并确定其索引路径?

标签: ios swift uicollectionview nsindexpath


【解决方案1】:

基于 cmets 而不是您的实际问题,您似乎想要的是获取第一个可见单元格的索引路径,以便您可以使用该路径删除单元格。

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 委托方法中使用或完成。

【讨论】:

  • 好的,谢谢,但我仍然得到这样的东西:imgur.com/a/6yI3p
  • 哦,谢谢,我怎样才能避免这种情况,只打印可见单元格的索引路径?
  • 避免什么?你的目标不明确。您的代码当前正在执行您要求它执行的操作 - 在用户滚动集合视图时打印所有可见单元格。
  • 您所说的“当前正在运行”是什么意思?没有这样的概念。
  • 再一次,“当前正在运行”是什么意思?
【解决方案2】:

[为 Swift 5.2 更新]这是一种比 @rmaddy 的回答更简洁的方法(但那个方法很好):

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

// Do whatever with the index path here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多