2017-07-26 6 views
0

Ich möchte Audio auf Klick auf Zelle wiedergeben. Und ändern Sie die Schaltfläche Bild.Sie funktionieren gut. Aber wenn ich scrolle, ändert sich mein Knopfbild mit 4 Zellen automatisch. Bitte helfen Sie. Jede Hilfe wäre willkommen.Schaltfläche Bild wiederholt auf Zelle

@IBAction func playSong (_ sender : UIButton , event: UIEvent){ 


    let buttonPosition:CGPoint = sender.convert(.zero, to: table) 
    let indexPath = self.table.indexPathForRow(at: buttonPosition) 
    let cell = table.cellForRow(at: indexPath!) as? CustumCell 
    let a = URL(string : "http://www.abstractpath.com/files/audiosamples/sample.mp3") 


     if((audioPlayers) != nil){ 
      audioPlayers = nil 
     } 
     audioPlayers = AVPlayer(url: a!) 

     if sender.isSelected == false { 
      sender.isSelected = true 
      audioPlayers?.play() 
      cell?.play.setImage(UIImage(named : "homestop"), for: .normal) 
     }else{ 
      sender.isSelected = false 
      audioPlayers?.pause() 
      cell?.play.setImage(UIImage(named : "homeplay"), for: .normal) 
     } 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let identifier = "CustumCell" 
     var cell: CustumCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? CustumCell 
     if cell == nil { 
      var nib : Array = Bundle.main.loadNibNamed("CustumCell",owner: self,options: nil)! 
      cell = nib[4] as? CustumCell 
     } 
     cell.reportView.isHidden = true 
     cell.play.tag = indexPath.row 
     cell.play.addTarget(self, action:#selector(playSong(_:event:)), for: .touchUpInside) 
     cell.homereport.tag = indexPath.row 
     cell.homereport.addTarget(self, action:#selector(showReportView(_:)), for: .touchUpInside) 
     return cell 
    } 

Antwort

0

Grundsätzlich, wenn Sie nach unten scrollen/oben/links/rechts und Ihre markierten Zelle geht dann außerhalb der Grenzen, wenn Sie mit Scroll wieder die cellForRowAt einmal genannt gehen werden.

I sugest Sie Wörterbuch mit [UITableViewCell : Bool] erstellen und innen:

if sender.isSelected == false { 
      sender.isSelected = true 
      audioPlayers?.play() 
      dic[cell] = true 
      cell?.play.setImage(UIImage(named : "homestop"), for: .normal) 
     }else{ 
      sender.isSelected = false 
      audioPlayers?.pause() 
      dic[cell] = false 
      cell?.play.setImage(UIImage(named : "homeplay"), for: .normal) 
     } 

Später innen:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let identifier = "CustumCell" 
     var cell: CustumCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? CustumCell 
     if cell == nil { 
      var nib : Array = Bundle.main.loadNibNamed("CustumCell",owner: self,options: nil)! 
      cell = nib[4] as? CustumCell 
     } 
     cell.reportView.isHidden = true 
     cell.play.tag = indexPath.row 
     cell.play.addTarget(self, action:#selector(playSong(_:event:)), for: .touchUpInside) 
     cell.homereport.tag = indexPath.row 
     cell.homereport.addTarget(self, action:#selector(showReportView(_:)), for: .touchUpInside) 

     if dic[cell] { 
     // Set the image of the button or what ever you like to :) 
     } 
     return cell 
    } 
Verwandte Themen