再次单击表格视图时如何停止歌曲,以及单击另一个单元格时播放另一首歌曲

时间:2018-09-27 19:22:43

标签: ios swift uitableview avaudioplayer

我有几首歌,并在桌面视图中显示。当我按单元格时,会播放歌曲。当我触摸相同的单元格时我想停下来,但是如果我触摸另一个单元格,我想让它仍在播放新歌曲。

extension SoundsViewController: UITableViewDataSource,UITableViewDelegate{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return songs.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = myTableView.dequeueReusableCell(withIdentifier: "soundsCell") as! SoundsTableViewCell
    cell.soundPicture.image = UIImage(named: "cell1")
    cell.soundLabel.text = songs[indexPath.row]
    cell.playStopImage.image = UIImage(named: "play")

    if selectedItemIndex == indexPath.row {
      cell.playStopImage.image = UIImage(named: "pause")
    }
    return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 120
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.selectedItemIndex = indexPath.row
    playSong(song: songs[indexPath.row], selectedItemIndex: selectedItemIndex!)
    self.myTableView.reloadData()
}

}

func playSong(song: String, selectedItemIndex: Int){
    do {
        audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: song, ofType: "mp3")!))
        audioPlayer.numberOfLoops = -1
        audioPlayer.play()
        var audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(AVAudioSessionCategoryPlayback)
        }catch{
            print(error)
        }
    }catch{
        print(error)
    }
}

1 个答案:

答案 0 :(得分:0)

大概您的public ActionResult LogOff() { Session.Clear(); Session.Abandon(); FormsAuthentication.SignOut(); return RedirectToAction("Login", "Account"); } 是视图控制器的实例变量。

在创建新的AVAudioPlayer之前,将playSong函数更改为调用audioPlayer.stop()。那应该停止之前的声音。

编辑:

向您的视图控制器添加这样的功能:

audioPlayer