Ios TableViewCell中UIButton的addTarget不';行不通

Ios TableViewCell中UIButton的addTarget不';行不通,ios,swift,uitableview,Ios,Swift,Uitableview,我正在制作一个表视图应用程序,并以编程方式创建了UITableViewCell。该单元由2个视图组成,第一个视图用于标签,第二个视图用于2个按钮和标签。按下按钮应更改标签的标题。此外,我还使用委托在视图控制器中实现逻辑。 这是我的手机号码。很抱歉把约束弄得一团糟。我只是在学习如何很好地实现它们 protocol FinalCellDelegate { func addButtonPressed(sender: UIButton) func subtactButtonPressed

我正在制作一个表视图应用程序,并以编程方式创建了UITableViewCell。该单元由2个视图组成,第一个视图用于标签,第二个视图用于2个按钮和标签。按下按钮应更改标签的标题。此外,我还使用委托在视图控制器中实现逻辑。 这是我的手机号码。很抱歉把约束弄得一团糟。我只是在学习如何很好地实现它们

protocol FinalCellDelegate {
    func addButtonPressed(sender: UIButton)
    func subtactButtonPressed(sender: UIButton)
}


class FinalCell: UITableViewCell {
  let label = UILabel()
  var addButton = UIButton()
  var numberLabel = UILabel()
  var subtractButton = UIButton()
  var delegate: FinalCellDelegate?


  override func awakeFromNib() {
       super.awakeFromNib()

   }

   override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: "FinalCell")


        contentView.addSubview(label)
        let addAndSubtractView = UIView()
        addAndSubtractView.addSubview(addButton)
        addAndSubtractView.addSubview(numberLabel)
        addAndSubtractView.addSubview(subtractButton)
        contentView.addSubview(addAndSubtractView)

        //constraints
        addButton.translatesAutoresizingMaskIntoConstraints = false
        addButton.trailingAnchor.constraint(equalTo: addAndSubtractView.trailingAnchor, constant: -15).isActive = true
        addButton.leadingAnchor.constraint(equalTo: numberLabel.trailingAnchor, constant: 10).isActive = true
        addButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
        subtractButton.translatesAutoresizingMaskIntoConstraints = false
        subtractButton.leadingAnchor.constraint(equalTo: addAndSubtractView.leadingAnchor, constant: 10).isActive = true
        subtractButton.trailingAnchor.constraint(equalTo: numberLabel.leadingAnchor, constant: -10).isActive = true
        subtractButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
        numberLabel.translatesAutoresizingMaskIntoConstraints = false
        numberLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
        addAndSubtractView.translatesAutoresizingMaskIntoConstraints = false
        addAndSubtractView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -5).isActive = true
        addAndSubtractView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
        label.translatesAutoresizingMaskIntoConstraints = false
        label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 20).isActive = true
        label.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true


        label.textColor = .black
        subtractButton.setTitle("-", for: .normal)
        subtractButton.setTitleColor(.black, for: .normal)
        addButton.setTitle("+", for: .normal)
        addButton.setTitleColor(.black, for: .normal)
        numberLabel.text = "0"
        numberLabel.textColor = .black

        subtractButton.addTarget(self, action: #selector(subtractButtonTapped(_:)), for: .touchUpInside)
        addButton.addTarget(self, action: #selector(addButtonTapped(_:)), for: .touchUpInside)
}

  @objc func addButtonTapped(_ sender: UIButton) {
      print("addButtonTapped")
       delegate?.addButtonPressed(sender: sender)
   }

   @objc func subtractButtonTapped(_ sender: UIButton) {
       print("subtractButtonTapped")
       delegate?.subtactButtonPressed(sender: sender)
   }

   }
这是我的cellForRow在indexPath的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "FinalCell", for: indexPath) as! FinalCell
        cell.delegate = self
        cell.cellTag = indexPath.row
        cell.addButton.tag = indexPath.row
        cell.subtractButton.tag = indexPath.row

        return cell
    }
当然,授权执行:

extension FinalGameSettings: FinalCellDelegate {

    func addButtonPressed(sender: UIButton) {
        print("works")
    }
    func subtactButtonPressed(sender: UIButton) {
        print("This works too")
}
}

问题是,当我按下按钮时,什么也没发生。请给我一个建议来处理这个问题

我复制你的项目并制作我自己的。调试后,我发现了这个。视图中的按钮不在视图中
addAndSubtractView
。这意味着你不能点击它。而您的
addAndSubtractView
不显示在单元格中,它隐藏在某个地方

po addButton.frame
▿ (60.0, -17.0, 30.0, 34.0)
  ▿ origin : (60.0, -17.0)
    - x : 60.0
    - y : -17.0
  ▿ size : (30.0, 34.0)
    - width : 30.0
    - height : 34.0

尝试修复您的自动布局。我建议您尝试使用SnapKit框架以获得更好的外观

什么意思?什么意思?什么意思?什么意思?什么意思?什么意思?单击控制台日志中的按钮后出现了哪些文本?我在ViewController和TableViewCell中都添加了打印语句,以检查问题出在哪里。问题是,当我按下按钮时,什么都不会被打印出来。所以,我不知道到底是什么不起作用。这就是为什么我需要经验丰富的程序员的帮助。它打印了“addButtonTapped”或“subtractButtonTapped”日志吗?没有打印任何内容,所以它必须位于其他元素后面。尝试设置要调试的颜色。或者更好的方法是使用Debug View HierachyThanks man!我删除了
addAndSubtractView
现在一切正常!