私はテーブルビューを持ち、各セルには再生ボタンがあります。再生ボタンは、再生と一時停止の画像を切り替えるUIButton
です。再生/一時停止ボタンが押されると、AVAudioPlayer
は、セルに関連付けられたオーディオファイルを再生/一時停止します。今のところ、私は完全にオーディオプレーヤーと同期してトグルする画像を持っています。しかし、オーディオの再生が終了したら、画像をデフォルトの状態(再生ボタンの画像)に戻したいと思います。AVAudioPlayerの再生終了時にテーブルビューのセルイメージを切り替えます
//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
}
}
に感謝し、ボタンを切り替えます。 1つのセルのオーディオファイルが再生されていて、別のファイルが選択されて再生されている場合、前のファイルの再生が停止します。前に 'audioPlayerDidFinishPlaying'を使用しましたが、正直なところ、' cellForRowAtIndexPath'以外のセルボタンのプロパティにアクセスしています。あなたが何を示唆しているか試してみてください。 – Brosef
ファイルに 'var playingAudioIndexPath:NSIndexPath'を格納できるはずです。オーディオが開始されると、インデックスパスを再生しているセルにこの値を設定します。次に、 'audioPlayerDidFinishPlaying'が呼び出されたときに、' let cell = self.table.cellForRowAtIndexPath(self.playingAudioIndexPath)? AudioCell {//ここでボタンをセルでトグルして実行}を実行し、値をnilに設定します – DMCApps
は単セル再生用のコードサンプルを追加しました – DMCApps