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