1

float の代わりに整数値を表示しようとしています。私は次のことを試しました:

    section.append(SliderRow() {
        $0.title = "Number of items"
        $0.tag = "numberOfItems"
        $0.minimumValue = 1
        $0.maximumValue = 10
        $0.steps = 10
        $0.value = 5
        $0.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 によって他のすべての属性にアクセスできます。たとえば、テキストの色を変更しますが、テキストは変更しません。テキストを設定していると思いますが、すぐに上書きされます。

スライダーに整数値を表示させる方法はありますか?

ありがとう。

4

2 に答える 2

6

2016 年 12 月 2 日以降、はるかに単純なアプローチがあります.....

$0.displayValueFor = {
   return "\(Int($0 ?? 0))"
}

(それを行う方法を示すhttps://github.com/xmartlabs/Eureka/issues/817へのクレジット- および関連する修正)

これは、Eureka SliderRow と StepperRow で Int を表示するのに最適です

于 2017-05-14T16:16:08.397 に答える
0

この問題を解決するために、Eureka リポジトリのクローンを作成しました。値を上書きすることについては正しかったことがわかりました。それをテストするために、onChange ハンドラー内でテキストを定数値に設定し、valueChanged 関数の SliderRow ソース コードに print ステートメントを追加しました。

    if shouldShowTitle() {

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

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

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

出力は次のようになりました。

現在の値: オプション("xyz")

更新された値: Optional("3.0")

現在の値: オプション("xyz")

更新された値: Optional("5.0")

そこで、整数を使用する SliderRowInt クラスを作成しました。

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 にも同様の問題があります。

誰かが同じ問題に遭遇した場合に備えて、クローンされたリポジトリに両方のクラスをチェックインしました: https://github.com/volkanx/Eureka/

于 2016-05-28T07:06:21.260 に答える