在 SliderRow 上显示整数值

Displaying integer values on SliderRow

我正在尝试显示整数值而不是浮点数。我尝试了以下方法:

    section.append(SliderRow() {
        [=10=].title = "Number of items"
        [=10=].tag = "numberOfItems"
        [=10=].minimumValue = 1
        [=10=].maximumValue = 10
        [=10=].steps = 10
        [=10=].value = 5
        [=10=].onChange { row in
            let isInteger = floor(row.value!) == row.value!
            if (!isInteger) {
                row.value = floor(row.value!)
            }

            let formattedString = String(format: "%.0f", row.value!)
            row.cell.valueLabel.text = formattedString
        }
    })

formattedString 显示了我想要的值,但我无法在屏幕上显示它们。我可以通过 row.cell 访问所有其他属性。例如,我更改了文本颜色,但没有更改文本。我猜我正在设置文本,但它很快就会被覆盖。

有没有办法让滑块显示整数值?

谢谢。

为了解决这个问题,我克隆了 Eureka 存储库。事实证明我覆盖这些值是正确的。为了测试它,我在 onChange 处理程序中将文本设置为一个常量值,然后在 valueChanged 函数的 SliderRow 源代码中添加了打印语句:

    if shouldShowTitle() {

        print("current value: \(valueLabel.text)" )

        valueLabel.text = "\(row.value!)"

        print("updated value: \(valueLabel.text)" )
    }

输出如下所示:

current value: Optional("xyz")

updated value: Optional("3.0")

current value: Optional("xyz")

updated value: Optional("5.0")

所以我自己创建了一个使用整数的 SliderRowInt class:

public final class SliderRowInt: Row<Int, SliderCellInt>, RowType {

    public var minimumValue: Int = 0
    public var maximumValue: Int = 10
    public var steps: UInt = 20

    required public init(tag: String?) {
        super.init(tag: tag)
    } }

现在我使用的是整数版本。也许不是最优雅的解决方案,但对我来说效果很好。

StepperRow 也有类似的问题,我用同样的方法解决了。

我将两个 classes 都签入了我的克隆存储库,以防有人遇到相同的问题,他们可以在这里找到:https://github.com/volkanx/Eureka/

自 2016 年 12 月 2 日起,有一种更简单的方法......

[=10=].displayValueFor = {
   return "\(Int([=10=] ?? 0))"
}

(归功于 https://github.com/xmartlabs/Eureka/issues/817,展示了如何操作 - 以及相关的修复)

这非常适合在 Eureka SliderRow 和 StepperRow 中显示 Int See this picture of xcode Simulator showing Int values on StepperRow and SliderRow