如何在collectionView中找到indexpath

时间:2017-06-16 08:37:50

标签: ios objective-c uitableview swift3 uicollectionview

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

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

因此我想找到当前和上一首播放歌曲的indexPath。

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

我怎么能找到它?

1 个答案:

答案 0 :(得分:0)

您需要将当前单元格的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()
    }
}

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

如果你不确定如何使用代表,这是另一个问题,&那里有很多关于此的信息。