嗨,我有一个带有三个按钮的自定义UITableViewCell,用于处理购物车功能,加号,减号和删除按钮,我需要知道已触摸哪个单元格。
我已经尝试使用“标签解决方案”,但是由于单元的生命周期,它无法正常工作。
谁能帮我找到解决方案?
提前致谢
我正在使用UITableViewCell的子类中的单元委托方法解决此问题。
快速概述:
1) 创建一个协议
protocol YourCellDelegate : class { func didPressButton(_ tag: Int) }
2) 子类化 您的 子类 UITableViewCell (如果尚未这样做):
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上面实现的协议。
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逻辑中是首选,它可用于表单元格中的其他元素,例如UISwitch,UIStepper等等。
UISwitch
UIStepper