我正在尝试使用自定义audio
将TableView
个文件列出到cell
中。此处,每个单元具有单个button
(用于play/pause
音频)。我的问题是,如果我单击第一个单元格中的播放按钮,或者其他单元格选定的按钮需要reset
(我的意思是第一个单元格单击play
到pause
其他或先前选择的{{1 }}需要休息一下才能恢复正常)。
我的当前输出屏幕
在我正在使用的代码下方,提供一些想法
cell
答案 0 :(得分:0)
在我的View Controller中的某个地方,我想有很多项目。该项目应具有一些属性,该属性表示项目是否为正在播放。例如
var isPlaying: Bool = // true if playing, false if not
如果只有字符串数组,则必须创建自定义类/结构
struct Audio {
var title: String = ""
var isPlaying: Bool = false
}
现在
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: InviteCell = inviteTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomOneCell
let item = yourItemArray[indexPath.row]
let image = item.isPlaying ? UIImage(named:"pause.png") : UIImage(named:"play.png")
cell.playButton.setImage(image, for: UIControlState.normal)
cell.btnCheck.tag = indexPath.row
cell.btnCheck.addTarget(self, action: #selector(self.btnCheck(_:)), for: .touchUpInside)
return cell
}
在操作按钮时,只需更改与索引相同的项目的值即可
@objc func btnCheck(_ sender: UIButton) {
for item in yourItemArray {
item.isPlaying = false
}
yourItemArray[sender.tag].isPlaying = !yourItemArray[sender.tag].isPlaying
self.tableView.reloadData()
}
答案 1 :(得分:-1)
将此添加到您的CustomOneCell
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
playButton.setImage(UIImage(named: selected ? "pause.png" : "play.png"), for:.normal)
}
然后只需在btnCheck(_ sender: UIButton)
func btnCheck(_ sender: UIButton) {
let indexPath = IndexPath(row: sender.tag, section: 0)
let cell = tableView.cellForRow(at: indexPath)
guard !cell.isSelected else { return } // return if cell is already selected
tableView.beginUpdates()
tableView.selectRow(at: [indexPath], animated: true, scrollPosition: .none)
tableView(tableView, didSelectRowAt: indexPath)
tableView.endUpdates()
}