我想点击单元格播放音频。并更改按钮图像。他们工作正常。但当我滚动我的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
}
答案 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
}