(SwiftUI)将Slider和TextField绑定到同一变量?

时间:2020-03-22 19:32:54

标签: swift swiftui swift5

我想知道是否可以将Slider和TextField绑定到同一变量? 原因是我希望用户能够通过滑动滑块或在文本字段中手动输入值来填充值。

执行任一操作还应更新另一种方法,例如,如果用户将滑块滑动到100,则文本字段应实时更新以显示100。

这是否可能,如果没有,那么是否存在任何可以提供相似结果的类似解决方案?

1 个答案:

答案 0 :(得分:1)

是的,有可能。以下代码显示了如何将值绑定到两个不同的控件。 (要使此代码可用,您需要在TextField上进行一些验证以限制范围。)

import SwiftUI

class Model : ObservableObject {

      @Published var value : Double = 50
}

struct ContentView: View {

      @ObservedObject var model = Model()

      var body: some View {

            let formatter = NumberFormatter()
            formatter.numberStyle = NumberFormatter.Style.decimal
            formatter.roundingMode = NumberFormatter.RoundingMode.halfUp
            formatter.maximumFractionDigits = 0
            //formatter.minimumFractionDigits = 2

            let spellOutFormatter = NumberFormatter()
            spellOutFormatter.numberStyle = .spellOut

            return Form() {
                  Text("Number as words: \(spellOutFormatter.string(from: NSNumber(value: model.value)) ?? "Not Known")")

                  TextField("Number", value: $model.value, formatter: formatter)

                  Slider(value: $model.value, in: 0...100, step: 1).padding()
            }
      }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}