ios - 如果 UIStepper 在 Swift 4 中以编程方式点击,如果它们都在 UITableViewCell 中,如何更改 UILabel 的文本?

标签 ios swift uitableview uilabel uistepper

Swift 4:我有一个静态单元格(分组样式)。我只是将一个 UILabel 和一个 UIStepper 添加到单元格中。现在我想在点击 UIStepper 时更改 UILabel 的文本。就像图片一样:

Picture 1

这是我的代码:

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:)'

Picture

但如果在单元格外添加了 labelValueChanged 函数,标签和 UIStepper 的值将不可用。

有什么办法可以实现吗?任何建议,将不胜感激。谢谢。

最佳答案

Is there any way to make it happen?

一种方法是使用步进器的 tag 属性来存储单元格的行号。然后 View Controller 可以获得步进器的 tag 并知道受影响的行。不过,这并不理想,因为它不太适合包含多个部分的表格。

There will be an error if the labelValueChanged function was added inside of the cell: Argument of '#selector' cannot refer to local function 'labelValueChanged(sender:)'

我不太清楚您为什么会遇到这个问题,但您当然可以将 IBAction 方法添加到自定义表格单元格类,将步进器的目标设置为单元格,然后将步进器的操作设置为该方法。而且您不需要以编程方式设置目标和操作——您可以在 Storyboard编辑器中配置它们。一个好的策略是让单元格将实际工作委托(delegate)给某个 Controller 对象,可能是 View Controller 。将步进器的目标设置为单元格可让单元格调用 Controller 中的方法,该方法包含比简单操作(只有 sender 参数)更多的参数,因此您可以传递行和部分、步进值如何变化,以及您可能需要的任何其他内容。

关于ios - 如果 UIStepper 在 Swift 4 中以编程方式点击,如果它们都在 UITableViewCell 中,如何更改 UILabel 的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46893385/

相关文章:

ios - 如何在展开 subview 时在 TableView 单元格中添加 subview 并对 subview 的元素执行操作?

ios - 如何在ios中的UITableView上实现复选框功能

ios - 绘制完美的圆角线,Swift

ios - 使用 alamofire 通过 iOS 应用程序连接 Windows SSL 服务器

ios - 删除 UITableView 中单元格前的空白

ios - 我知道如何仅在顶部禁用 uitableview 的弹跳 - 但我如何才能仅在底部执行此操作?

swift - http header 中的 Yelp 身份验证

ios - UIScrollview 无法识别从屏幕边缘滑动

ios - 使用按钮淡化 UIColor

ios - NSMutableArray 保存和加载到默认值无法正常工作