如何在collectionView中找到索引路径

Posted

技术标签:

【中文标题】如何在collectionView中找到索引路径【英文标题】:How to find indexpath in collectionView 【发布时间】:2017-06-16 08:37:50 【问题描述】:

我正在开发播放器应用程序。我有播放列表,在 collectionview 上有一个边框,显示当前正在播放的歌曲。当歌曲结束时,它会自动播放下一首歌曲。

我想自动将该单元格更新为 currentPlaying 单元格并将前一个单元格重置为正常状态。

因此,我想找到当前和以前播放的歌曲的 indexPath。

func playingCompositionForReload(composition: Composition) 
        composition.isPlaying = true        
      // find index path and reload one cell only

我怎么能找到它?

【问题讨论】:

在我看来你的问题太笼统了 创建三个 IndexPath 类型的变量:currentPlaying、previouslyPlayed 和 nextPlayable。每次更新当前播放的歌曲时,都会更新 VC 中的所有三个索引路径。 如果您提出问题,您应该及时更新您是否找到了答案或实际上使用了某人为您发布的答案。否则人们会在您的历史记录中看到您不接受答案,并且他们将停止回答。 【参考方案1】:

您需要将当前单元格的 indexPath 保存在 var 中:

var currentlyActiveCellIndexPath: IndexPath

当用户选择一个单元格时,将 currentActiveCellIndexPath 设置为该单元格的 indexPath(尽管这取决于您如何启动所有内容 - 例如,如果您从第一个单元格自动开始,则可能不需要此设置,那么您只需设置 currentActiveCellIndexPath到 IndexPath(item: 0, section: 0) )

func collectionView(_ collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: IndexPath) 
    self.currentlyActiveCellIndexPath = indexPath
    // etc, etc

您需要实现某种委托模式(单元格在其委托上调用方法)以让您的控制代码知道歌曲已完成,并且当它收到调用时,只需调用您的函数已在下一个单元格上创建,您可以通过递增 indexPath 的项目来找到该单元格。例如 -

// delegate method called by cell

func songDidFinish() 

    self.currentlyActiveCellIndexPath.item += 1

    // Obviously you'll have to use whatever class you've created your cells as here, with the relevant methods, etc.

    if let nextCell = self.collectionView.cellForItem(at: self.currentlyActiveCellIndexPath) as? SongPlayingCell 
        nextCell.startPlaying()
    

据推测,当一个单元格停止播放时,它可以设置自己的状态。

如果您不确定如何使用委托,那是另一个问题,并且有大量关于此的信息。

【讨论】:

以上是关于如何在collectionView中找到索引路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TableView 的 CollectionView 中获取图像的索引路径?

如何在集合视图中查找最后一个可见单元格的索引路径。但索引路径是随机的不断变化

单元格变量为 nil,其中设置了值 collectionview 索引路径

如何将值从 tableview 传递到 collectionview

如果当前部分单元格高度为零,则不会为后续部分调用索引路径处的行的 Collectionview 单元格

如何获取 uicollectionview 的最后一个索引路径?