我正在开发播放器应用程序。我有播放列表,在收集视图上有一个边框,显示当前播放的歌曲。当歌曲结束时,它会自动进入下一首歌曲。
我想自动将该单元格更新为currentPlaying单元格,并将之前的单元格重置为正常状态。
因此我想找到当前和上一首播放歌曲的indexPath。
func playingCompositionForReload(composition: Composition) {
composition.isPlaying = true
// find index path and reload one cell only
}
我怎么能找到它?
答案 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()
}
}
据推测,当一个单元格停止播放时,它可以设置自己的状态。
如果你不确定如何使用代表,这是另一个问题,&那里有很多关于此的信息。