테이블보기가 있고 각 셀에 재생 버튼이 있습니다. 재생 버튼은 재생 및 일시 중지 이미지 사이를 전환하는 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
}
}
감사를 전환. 한 셀의 오디오 파일이 재생되고 다른 파일이 재생되도록 선택되면 이전 파일의 재생이 중지됩니다. 이전에'audioPlayerDidFinishPlaying'을 사용했지만, 솔직히 말해서, 'cellForRowAtIndexPath' 외부의 셀 버튼 속성에 액세스하고 있습니다. 당신이 제안하고있는 것을 시도해보십시오. – Brosef
파일에'var playingAudioIndexPath : NSIndexPath'를 저장할 수 있어야합니다. 오디오가 시작되면 인덱스 경로를 재생하는 셀에이 값을 설정하십시오. 그런 다음'audioPlayerDidFinishPlaying'가 호출 될 때'if cell = self.table.cellForRowAtIndexPath (self.playingAudioIndexPath)? AudioCell {// 여기에서 버튼을 토글하여 셀에서 실행}을 선택하고 값을 0으로 설정합니다. – DMCApps
에 단일 셀 재생을위한 코드 샘플이 추가되었습니다. – DMCApps