SwiftUI 问题将变量传递给另一个视图
SwiftUI Question passing a variable to another view
我想将浮点变量从一个视图传递到另一个新视图。
在下面的代码中有一个名为 mhzValue 的浮点值,它是通过滑块设置的,滑块更改该值,然后文本显示在视图中。当用户点击导航按钮以显示时新视图,我希望能够获取 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
这很容易用 Bindings 完成。因为 mhzValue
标记有 @State
属性 包装器,所以它具有关联的绑定。因此,您可以在 second 视图中声明一个 @Binding
变量,并使用绑定到原始变量来初始化它。
struct NextView : View {
@Binding var mhzValue: Float
...
}
当您将 NextView
指定为导航按钮的目的地时,将其传递给 mhzValue
的绑定。 (dollar-sign 语法是一种 shorthand 引用绑定的方式。)
struct ContentView : View {
@State private var mhzValue : Float = 0
...
NavigationButton(destination: NextView(mhzValue: self.$mhzValue)){...}
...
}
然后您可以在 NextView
:
中使用 mhzValue
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)
}
}
}
您在 NextView
内对 mhzValue
所做的任何更改实际上都是对 ContentView.mhzValue
的更改。
我想将浮点变量从一个视图传递到另一个新视图。
在下面的代码中有一个名为 mhzValue 的浮点值,它是通过滑块设置的,滑块更改该值,然后文本显示在视图中。当用户点击导航按钮以显示时新视图,我希望能够获取 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
这很容易用 Bindings 完成。因为 mhzValue
标记有 @State
属性 包装器,所以它具有关联的绑定。因此,您可以在 second 视图中声明一个 @Binding
变量,并使用绑定到原始变量来初始化它。
struct NextView : View {
@Binding var mhzValue: Float
...
}
当您将 NextView
指定为导航按钮的目的地时,将其传递给 mhzValue
的绑定。 (dollar-sign 语法是一种 shorthand 引用绑定的方式。)
struct ContentView : View {
@State private var mhzValue : Float = 0
...
NavigationButton(destination: NextView(mhzValue: self.$mhzValue)){...}
...
}
然后您可以在 NextView
:
mhzValue
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)
}
}
}
您在 NextView
内对 mhzValue
所做的任何更改实际上都是对 ContentView.mhzValue
的更改。