按钮图像重复在单元格上

时间:2017-07-26 14:31:03

标签: audio swift3 avaudioplayer

我想点击单元格播放音频。并更改按钮图像。他们工作正常。但当我滚动我的4单元格按钮图像自动更改。请帮助。任何帮助将不胜感激。

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

1 个答案:

答案 0 :(得分:0)

基本上,无论何时向下滚动/向上/向左/向右,并且标记的单元格超出界限,每当您向后滚动时,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
    }