ios - TableViewCell 中 UIButton 的 addTarget 不起作用
问题描述
我正在制作一个表格视图应用程序,并以编程方式创建了 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)
}
}
这是我在 indexPath 代码处的 cellForRow :
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 框架以获得更好的外观
推荐阅读
- javascript - 使用 JS 查询 AD 用户(在 html 页面中)
- azure - YAML 管道:部署与作业、ScriptPath 和 csmFile 不起作用
- python - 未添加 Django DateTimeField 和用户输入字段
- c# - 如何过滤掉字符串
- image - 可以在没有 Photoshop 文件签名的情况下从 Photoshop 导出 JPEG 吗?
- .net - .net 核心调用 wcf 服务 - SecurityAccessDeniedException:无法对安全令牌进行身份验证或授权
- linux - Gitlab CE 不向authorized_keys 添加公钥
- python - 如何解决显示“错误解释器:符号链接级别太多”的jupyter笔记本问题?
- spring-boot - 创建 org.springframework.cloud.stream.config.BinderFactoryAutoConfiguration 中定义的名称为“compositeMessageChannelConfigurer”的 bean 时出错
- python - 所需的 AWS DynamoDB 触发器标识符在所有调用的 Lambda 中都相同。最好是 UUID