按钮图像在单元格上重复

Button Image Repeated On cell

我想在点击单元格时播放音频。并更改按钮 image.They 工作正常。但是当我自动滚动我的 4 格按钮图像时 change.Please 帮助。任何帮助将不胜感激。

   @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
    }

基本上,每当您滚动 down/top/left/right 并且您标记的单元格超出范围时,每当您返回滚动时 cellForRowAt 将再次被调用。

我建议你用 [UITableViewCell : Bool] 和里面的 :

创建字典
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)
        }

稍后在里面:

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
    }