(SwiftUI) 将 Slider 和 TextField 绑定到同一个变量?
(SwiftUI) Bind Slider and TextField to the same variable?
我想知道是否可以将 Slider 和 TextField 绑定到同一个变量?
原因是我希望用户能够通过滑动滑块或手动将值输入文本字段来填充值。
做任何一个也应该更新另一个方法,例如,如果用户将滑块滑动到值 100,那么文本字段应该实时更新以显示 100。
这可能吗?如果不可能,是否有任何类似的解决方案可以提供类似的结果?
是的,这是可能的。下面的代码显示了如何将一个值绑定到两个不同的控件。 (要使此代码可用,您需要对 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()
}
}
我想知道是否可以将 Slider 和 TextField 绑定到同一个变量? 原因是我希望用户能够通过滑动滑块或手动将值输入文本字段来填充值。
做任何一个也应该更新另一个方法,例如,如果用户将滑块滑动到值 100,那么文本字段应该实时更新以显示 100。
这可能吗?如果不可能,是否有任何类似的解决方案可以提供类似的结果?
是的,这是可能的。下面的代码显示了如何将一个值绑定到两个不同的控件。 (要使此代码可用,您需要对 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()
}
}