Swift 4:我有一个静态单元格(分组样式)。我只是在单元格中添加了UILabel和UIStepper。现在,当我点击UIStepper时,我想更改UILabel的文本。就像图片一样:
以下是我的代码:
if indexPath.section == 0 {
cell.textLabel?.text = "\(first[indexPath.row])"
let step = UIStepper()
let label = UILabel()
func labelValueChanged(sender:UIStepper!) {
label.text = "\(Int(step.value))"
}
cell.addSubview(step)
step.translatesAutoresizingMaskIntoConstraints = false
step.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true
step.widthAnchor.constraint(equalToConstant: 94).isActive = true
step.heightAnchor.constraint(equalToConstant: 29).isActive = true
step.rightAnchor.constraint(equalTo: cell.rightAnchor, constant: -30).isActive = true
step.addTarget(self, action: #selector(labelValueChanged), for: .valueChanged)
cell.addSubview(label)
label.text = "0"
label.translatesAutoresizingMaskIntoConstraints = false
label.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true
label.widthAnchor.constraint(equalToConstant: 50).isActive = true
label.heightAnchor.constraint(equalToConstant: 21).isActive = true
label.rightAnchor.constraint(equalTo: cell.rightAnchor, constant: -124).isActive = true
}
如果在单元格内添加了labelValueChanged函数,则会出错:Argument of '#selector' cannot refer to local function 'labelValueChanged(sender:)'
但是如果在单元格之外添加了labelValueChanged函数,则标签和UIStepper的值将不可用。
有没有办法让它成真?任何建议,将不胜感激。感谢。
答案 0 :(得分:0)
有没有办法让它成为现实?
一种方法是使用步进器的tag
属性来存储单元格的行号。然后,视图控制器可以获取步进器的tag
并知道哪个行受到影响。但这并不理想,因为它对于具有多个部分的表格并不适用。
如果在单元格内添加了labelValueChanged函数,则会出错:
Argument of '#selector' cannot refer to local function 'labelValueChanged(sender:)'
我无法确定你为什么遇到这个问题,但是你当然可以将IBAction方法添加到自定义表格单元类中,将步进器的目标设置为单元格,并将步进器的操作设置为该方法。而且您不需要以编程方式设置目标和操作 - 您可以在情节提要编辑器中配置它们。一个好的策略是让单元格将实际工作委托给某个控制器对象,可能是视图控制器。将步进器的目标设置为单元格允许单元格调用控制器中的方法,该方法包含的参数多于简单的操作(仅具有sender
参数),因此您可以传递行和节,如何步进器值已更改,以及您可能需要的任何其他内容。