我有一个tableview,每个单元格都有一个播放按钮。播放按钮是在播放和暂停图像之间切换的UIButton
。当播放/暂停按钮被按下时,AVAudioPlayer
播放/暂停与该单元相关联的音频文件。截至目前,我的图像完美切换并与音频播放器同步。但是,当音频完成播放时,我希望图像切换回其默认状态 - 播放按钮图像。当AVAudioPlayer完成播放时切换tableview单元格图像
//View controller containing tableview
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.audioTable.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! AudioCell
let track = self.sectionTracks[indexPath.row]
cell.playButton.addTarget(self, action: #selector(HomeController.playPausePressed(_:)), forControlEvents: UIControlEvents.TouchUpInside)
var playButtonImage = UIImage(named: "TableViewCellPlayButton84.jpg")
var pauseButtonImage = UIImage(named: "TableViewCellPauseButton84.jpg")
playButtonImage = playButtonImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
pauseButtonImage = pauseButtonImage?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
cell.playButton.setImage(playButtonImage, forState: UIControlState.Normal)
cell.playButton.setImage(pauseButtonImage, forState: UIControlState.Selected)
cell.playButton.selected = false
return cell
}
func playPausePressed(sender:UIButton) {
let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.audioTable)
let cellIndexPath = self.audioTable.indexPathForRowAtPoint(pointInTable)
let track = self.sectionTracks[cellIndexPath!.row]
//Handle AVAudioPlayer play/pause functionality
}
//Custom tableview cell file
@IBAction func playPausePressed(sender: UIButton!) {
if (sender.selected)
{
sender.selected = false
}
else{
sender.selected = true
}
}
感谢。如果一个单元的音频文件正在播放,而另一个文件被选中播放,则以前的文件将停止播放。我之前使用过'audioPlayerDidFinishPlaying',但坦率地说,我的问题是访问'cellForRowAtIndexPath'之外的单元格按钮属性。我试试你的建议。 – Brosef
您应该能够在文件中存储'var playingAudioPath:NSIndexPath'。一旦音频开始将此值设置为播放索引路径的单元格。然后,当调用'audioPlayerDidFinishPlaying'时,只需调用'if let cell = self.table.cellForRowAtIndexPath(self.playingAudioIndexPath)as? AudioCell {//执行单元格切换按钮}'并将值设置为零在这里 – DMCApps
增加了一些代码示例单细胞播放 – DMCApps