我正在尝试在tableview单元中实现播放/暂停按钮。每个单元格都有单个按钮,每当用户单击它时,都应更改按钮图像,还需要调用所需的功能,滚动后也应相同。
下面的代码我正在使用
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) - > UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("productCell") as ? SepetCell
cell.onButtonTapped = {
//Do whatever you want to do when the button is tapped here
}
答案 0 :(得分:1)
首先请查看tableView单元的每个按钮将具有与之关联的唯一标签,因此,为了更新特定单元格的按钮,您将必须在单元格中定义按钮的标签,然后传递该功能标签可以对选定单元格的特定按钮执行操作。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cell_identifier", for:
indexPath) as! CellClass
cell.button.tag = indexPath.row
cell.button.addTarget(self, action: #selector(playpause), for: .touchUpInside)
}
@objc func playpause(btn : UIButton){
if btn.currentImage == UIImage(named: "Play") {
btn.setImage(UIImage(named : "Pause"), forState: .Normal)
}
else {
btn.setImage(UIImage(named : "Play"), forState: .Normal)
}
// perform your desired action of the button over here
}
答案 1 :(得分:1)
Swift最先进的是回调闭包。它们易于实现且非常高效。
在数据源模型中添加属性
false
在Interface Builder中,选择自定义单元中的按钮,然后按⌥⌘4进入“属性”检查器。在弹出菜单var isPlaying = false
中选择State Config
,然后从Default
弹出菜单中选择适当的图像,对Image
状态执行相同的操作。
在自定义单元格中,为该按钮添加一个回调属性以及一个插座和动作(将两者都连接到该按钮)。图像是通过Selected
属性设置的。
isSelected
在@IBOutlet weak var button : UIButton!
var callback : (()->())?
@IBAction func push(_ sender: UIButton) {
callback?()
}
中的控制器中添加回调,cellForRow
是数据源数组的当前项。按钮的状态保留在item
isPlaying