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

ada*_*ell 2 swift swift5 swiftui

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

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

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

Obl*_*ely 6

是的,这是可能的。以下代码演示如何将值绑定到两个不同的控件。(为了使此代码可用,您需要对 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()
    }
}
Run Code Online (Sandbox Code Playgroud)