一尘不染

UITableViewCell按钮与动作

swift

嗨,我有一个带有三个按钮的自定义UITableViewCell,用于处理购物车功能,加号,减号和删除按钮,我需要知道已触摸哪个单元格。

我已经尝试使用“标签解决方案”,但是由于单元的生命周期,它无法正常工作。

谁能帮我找到解决方案?

提前致谢


阅读 188

收藏
2020-07-07

共1个答案

一尘不染

我正在使用UITableViewCell的子类中的单元委托方法解决此问题。

快速概述:

1) 创建一个协议

protocol YourCellDelegate : class {
    func didPressButton(_ tag: Int)
}

2) 子类化 您的 子类 UITableViewCell (如果尚未这样做):

class YourCell : UITableViewCell
{
     var cellDelegate: YourCellDelegate?   
      @IBOutlet weak var btn: UIButton!
    // connect the button from your cell with this method
    @IBAction func buttonPressed(_ sender: UIButton) {
        cellDelegate?.didPressButton(sender.tag)
    }         
    ...
}

3) 您的视图 控制器 符合YourCellDelegate上面实现的协议。

class YourViewController: ..., YourCellDelegate {  ... }

4) 在定义了单元之后(用于重用), 设置一个委托

let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! YourCell
cell.cellDelegate = self
cell.btn.tag = indexPath.row

5) 在同一控制器(您实现的UITableView委托/数据源在哪里)中, 放置来自YourCellDelegateprotocol
的方法

func didPressButton(_ tag: Int) {
     print("I have pressed a button with a tag: \(tag)")
}

现在,您的解决方案不再取决于标签/数字。您可以根据需要添加任意数量的按钮,因此无论您要安装多少个按钮,都可以通过委托获得响应。

此协议代理解决方案在iOS逻辑中是首选,它可用于表单元格中的其他元素,例如UISwitchUIStepper等等。

2020-07-07