[英]Initializing a Slider value in SwiftUI
在學習SwiftUI
的過程中,我遇到了這個問題。
我對 slider 有這樣的看法:
struct RangeSpanView: View {
var minimumValue,maximumValue:Double
init(minSlide: UInt64,
maxSlide: UInt64) {
self.minimumValue = Double(minSlide)
self.maximumValue = Double(maxSlide)
}
@State var sliderValue = 0.0
var body: some View {
VStack {
HStack {
Text("\(Int(minimumValue))")
Slider(value: $sliderValue,
in: minimumValue...maximumValue)
Text("\(Int(maximumValue))")
}.padding()
Text("\(Int(sliderValue))")
Spacer()
}
}
}
這是加載視圖的代碼。
var body: some View {
NavigationLink(destination: RangeSpanView(minSlide: myMinVal,
maxSlide: myMaxVal),
label: {
.......... // Useful code.
})
}
使用 slider 可以正常工作。 關於sliderValue的初始化,只有一點不一致的細節我想修復。
當前代碼中的方式是將sliderValue初始化為0.0,當最小值和最大值分別為150.0和967.0(例如)時,這並不是我喜歡的。
我嘗試了各種解決方案來將sliderValue初始化為minimumValue (例如)以使其保持一致。 但它總是失敗並出現一些錯誤消息,抱怨Slider
object 中的一些“預期參數類型'綁定”。
那么,有沒有合適的方法來解決這個問題呢?
像這樣的東西怎么樣:
struct TestView: View {
let myMinVal: UInt64 = UInt64.random(in: 100...200)
let myMaxVal: UInt64 = UInt64.random(in: 400...600)
@State var sliderValue: Double = 0
var body: some View {
RangeSpanView(
minimumValue: Double(myMinVal),
maximumValue: Double(myMaxVal),
sliderValue: $sliderValue
).onAppear {
self.sliderValue = Double(self.myMinVal)
}
}
}
struct RangeSpanView: View {
var minimumValue: Double
var maximumValue: Double
@Binding var sliderValue: Double
var body: some View {
VStack {
HStack {
Text("\(Int(minimumValue))")
Slider(value: $sliderValue,
in: minimumValue...maximumValue)
Text("\(Int(maximumValue))")
}.padding()
Text("\(Int(sliderValue))")
Spacer()
}
}
}
您可以在 SliderValue 上使用 @Binding var,以便在呈現它之前設置起始值。 我使用了 onAppear 但您可以在設置 myMinVal 的任何位置設置 sliderValue
您可以使用 slider 的最低最小值初始化您的 @State 變量。 因此,您不需要在 willApear() 方法中執行此操作。
struct RangeSpanView: View {
var minimumValue,maximumValue:Double
//declare State here
@State var sliderValue : Double
init(minSlide: UInt64,
maxSlide: UInt64) {
self.minimumValue = Double(minSlide)
self.maximumValue = Double(maxSlide)
//Initialize the State with the lowest value
self._sliderValue = State(initialValue: self.minimumValue)
}
我認為 Ludyem 正在做某事。 在這個網站上,我找到了為什么在 init 中設置值不起作用的解釋。
但是如果我們在 slider 上使用 onAppear function 我們可以確保默認值在這樣的范圍內
.onAppear {
if(self.sliderValue < self.minimumValue) {
self.sliderValue = self.minimumValue
}
}
所以整個事情看起來像這樣
struct RangeSpanView: View {
let minimumValue,maximumValue:Double
init(minSlide: UInt64, maxSlide: UInt64) {
self.minimumValue = Double(minSlide)
self.maximumValue = Double(maxSlide)
}
@State var sliderValue = 0.0
var body: some View {
VStack {
Text("hi guys")
HStack {
Text("\(Int(minimumValue))")
Slider(value: $sliderValue,
in: minimumValue...maximumValue)
.onAppear {
if(self.sliderValue < self.minimumValue) {
self.sliderValue = self.minimumValue
}
}
Text("\(Int(maximumValue))")
}.padding()
Text("\(Int(sliderValue))")
Spacer()
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.