我想将Float变量从一个视图传递到另一个新视图。
在下面的代码中,有一个称为mhzValue的Float值,该值是通过Slider设置的,滑块会更改该值,然后Text将显示在视图中。当用户点击Navigation Button来显示新视图时,我希望能够使用mhzValue并将其显示在文本框中的新视图中,并将其设置为另一个变量。
希望有道理。
请在下面查看一些示例代码。
谢谢。
克雷格
import SwiftUI
struct ContentView : View {
@State private var mhzValue : Float = 0
var body: some View {
// Navigation View
NavigationView {
VStack{
Text("Test Value:")
.font(.headline)
.color(.blue)
.padding(.leading, -180.0)
//Get Slider Value
Slider(value: $mhzValue, from: 1, through: 55, by: 1)
.padding(.horizontal)
//Display Slider Value
Text("\(Int(mhzValue)) Value")
.font(.title)
.fontWeight(.semibold)
.color(.blue)
// Naviagtion Button and send value of mhzValue to new View
NavigationButton(destination: NextView()){
Image(systemName: "plus.square.fill")
.foregroundColor(.white)
.font(/*@START_MENU_TOKEN@*/.title/*@END_MENU_TOKEN@*/)
.frame(width: 150.0, height: 16.0)
.padding(15)
.background(Color.red)
.cornerRadius(10.0)
}
}
}
}
}
// New View to show Slider Value
struct NextView : View {
var body: some View {
Text("Display Slider Value Here:")
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
使用Bindings可以很容易地做到这一点。因为mhzValue标记有@State属性包装器,所以它具有关联的Binding。因此,您可以@Binding在第二个视图中声明一个变量,并使用绑定到原始变量对其进行初始化。
struct NextView : View {
@Binding var mhzValue: Float
...
}
Run Code Online (Sandbox Code Playgroud)
当您指定NextView为导航按钮的目的地时,将Binding传递给mhzValue。(美元符号语法是引用绑定的一种简便方法。)
struct ContentView : View {
@State private var mhzValue : Float = 0
...
NavigationButton(destination: NextView(mhzValue: self.$mhzValue)){...}
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以mhzValue在内部使用NextView:
struct NextView : View {
@Binding var mhzValue: Float
var body: some View {
VStack{
Text("Display Slider Value Here:")
Text("\(Int(mhzValue)) Value")
.font(.title)
.fontWeight(.semibold)
.color(.blue)
}
}
}
Run Code Online (Sandbox Code Playgroud)
你做出的任何更改mhzValue内NextView将有效地改变ContentView.mhzValue。
| 归档时间: |
|
| 查看次数: |
1689 次 |
| 最近记录: |