Ich habe eine Tabellenansicht und jede Zelle hat eine Play-Taste. Die Wiedergabetaste ist eine UIButton
, die zwischen einem Wiedergabe- und einem Pause-Bild wechselt. Wenn die Wiedergabe/Pause-Taste gedrückt wird, spielt/pausiert AVAudioPlayer
die Audiodatei, die der Zelle zugeordnet ist. Ab sofort lassen sich die Bilder perfekt und synchron zum Audioplayer umschalten. Wenn der Ton jedoch abgespielt wird, möchte ich, dass das Bild in den Standardzustand zurückkehrt - das Bild der Wiedergabetaste.Toggle tableview cell image wenn AVAudioPlayer abgespielt wird
//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
}
}
Dank. Wenn die Audiodatei für eine Zelle wiedergegeben wird und eine andere Datei für die Wiedergabe ausgewählt wird, wird die vorherige Datei nicht mehr abgespielt. Ich habe 'audioPlayerDidFinishPlaying' vorher verwendet, aber um ehrlich zu sein, mein Problem ist der Zugriff auf die Knopfeigenschaften der Zellen außerhalb von' cellForRowAtIndexPath'. Ich werde versuchen, was Sie vorschlagen. – Brosef
Sie sollten einen 'var playingAudioIndexPath: NSIndexPath' in der Datei speichern können. Sobald der Audio-Start beginnt, setzen Sie diesen Wert auf die Zelle, die den Indexpfad spielt. Wenn 'audioPlayerDidFinishPlaying' aufgerufen wird, dann rufe einfach' if let cell = self.table.cellForRowAtIndexPath (self.playingAudioIndexPath) als? AudioCell {// Perform-Schalter hier an der Zelle umschalten} 'und den Wert auf Null setzen – DMCApps
ein Codebeispiel für Einzelzellen-Wiedergabe hinzugefügt – DMCApps