要检测自定义UITableCell中哪个按钮被按下,可以使用代理模式来实现。
首先,创建一个协议来定义按钮按下的代理方法:
protocol CustomTableCellDelegate: AnyObject {
func buttonPressed(in cell: CustomTableCell, at index: Int)
}
然后,在自定义的UITableCell类中,添加一个委托属性和一个按钮按下的动作方法:
class CustomTableCell: UITableViewCell {
weak var delegate: CustomTableCellDelegate?
var buttonIndex: Int = 0
@IBAction func buttonPressed(_ sender: UIButton) {
delegate?.buttonPressed(in: self, at: buttonIndex)
}
}
在UITableViewDataSource的cellForRow方法中,为每个自定义的UITableCell设置委托:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableCell", for: indexPath) as! CustomTableCell
cell.delegate = self
cell.buttonIndex = indexPath.row
return cell
}
最后,在UITableViewDelegate中实现CustomTableCellDelegate协议的方法来获取按钮按下的信息:
extension ViewController: CustomTableCellDelegate {
func buttonPressed(in cell: CustomTableCell, at index: Int) {
print("Button pressed in cell at index: \(index)")
}
}
这样,在自定义的UITableCell中的按钮被按下时,会回调到ViewController中的buttonPressed方法,你可以根据index来判断是哪个按钮被按下。
注意:在使用这种方法时,确保为自定义的UITableCell设置了reuse identifier,且在Storyboard或XIB文件中将按钮的Touch Up Inside事件与buttonPressed方法连接起来。