如何检测是否已选择其他集合视图单元格?

时间:2018-07-09 03:22:20

标签: uicollectionview cell avplayer selecteditem

我正在开发一个音乐应用程序,通过该音乐应用程序,可以选择一个收藏视图单元来播放曲目-我希望该单元在被选择/点击时播放,在第一次选择时播放,在再次被选择/点击时暂停。当选择相同的单元格时,我可以有效地播放和暂停,但是当我选择其他单元格时,就会出现问题。如何分隔逻辑,以便可以发现已选择一个新单元格? (因此可以播放和暂停其他曲目)。我尝试了didSelectItemAt委托方法,但是每次选择该单元格时都会调用该方法,而且我无法弄清楚如何检测是否已选择其他单元格。

换句话说,我正在寻找的行为:轻按单元1-播放曲目1,再次轻按单元1-曲目1暂停轻按单元1-播放曲目1,单元2被点击-曲目2播放。

任何帮助将不胜感激。

P.S。我正在使用Swift

Visual representation of the App (a collection view where each cell is a seperate track)

编辑

var currentTrack: Int!

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {  

          currentTrack = indexPath.item

   switch selected {
    case true:
        playAudio()
    case false: 
    //Trying to match the current indexPath against the selected cell so I can play and pause that one
     if currentTrack != indexPath.item {
         playAudio()
      } else {
        pause()
      }
    } 
} 

 func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

  pointerArray[keys[indexPath.item]] = false
  print("Stop", keys[indexPath.item])

}

1 个答案:

答案 0 :(得分:0)

您可以使用indexPath来检查正在选择的项目。我将以打印为例,但是您可以添加播放代码的方式。

var songArray = ["SongOne", "SongTwo", "SongThree"]

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    print(songArray[indexPath.item])

}

编辑

在那种情况下,我将为每首歌曲设置一个字典和一个指针数组,以检查当前曲目是否正在播放。也。如果您想在新曲目开始播放时停止当前曲目,可以使用didDeselectItemAt函数。这是同时使用这两个功能并打印的代码:

var songKeys = ["SongOne", "SongTwo", "SongThree"]
var songArray = ["SongOne" : false, "SongTwo" : false, "SongThree" : false]

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {


    if songArray[songKeys[indexPath.item]] == false {
        songArray[songKeys[indexPath.item]] = true
        print("Playing", songKeys[indexPath.item])
        return
    }

    songArray[songKeys[indexPath.item]] = false
    print("Stop", songKeys[indexPath.item])

}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

    songArray[songKeys[indexPath.item]] = false
    print("Stop", songKeys[indexPath.item])

}