无法从 Swiftui 中的 Picker 获取选定值
Unable to get selected value from Picker in Swiftui
我正在尝试创建一个包含一些文本和选择器视图的模型视图。选择器视图是有条件的,并且基于状态变量进行切换。 Toggle 工作正常,但我无法查看选定的值。我使用的是简单的选择器,无法看到选定的值
点击温度值时,所选值不显示任何内容。
有什么想法吗?
import SwiftUI
struct AddTemperature1: View {
@Environment(\.presentationMode) var presentationMode
@State var selection: String = ""
@State var selectedTemperature : String = ""
@State var showHideWheel: Bool = false
var body: some View {
VStack {
HStack {
Text("Temperature")
.foregroundColor(Color.gray)
.font(.custom("Heavy Condensed", size: 20))
.padding()
HStack{
Button(action: {
self.showHideWheel.toggle()
}){
Text(selectedTemperature.count > 0 ? selectedTemperature : "Select")
.foregroundColor(Color.cclBrandBlueColor)
.font(.custom("Heavy Condensed", size: 20))
//.padding()
Image(systemName: "chevron.right") .foregroundColor(Color.cclBrandBlueColor)
.padding(.trailing)
}
}
.frame(width: (UIScreen.main.bounds.width - 60) / 2, alignment: .trailing)
.padding()
}.background(Color("Color1"))
.cornerRadius(15)
.padding(\[.top, .bottom\],10)
.shadow(color: Color.black.opacity(0.1), radius: 5, x: 8, y: 8)
.shadow(color: Color.white.opacity(0.5), radius: 5, x: -8, y: -8)
Spacer()
if self.showHideWheel {
VStack (alignment: .center){
// VStack{
Picker(selection: $selection, label: Text("")){
ForEach(50...120, id:\.self){ i in
Text("\(i)").tag(i)
}
}.labelsHidden()
Text("You selected: \(selection)")
}.background(Color("Color1"))
.cornerRadius(25)
.frame(width: (UIScreen.main.bounds.width - 20), alignment: .center)
// .padding(\[.top, .bottom\],10)
.shadow(color: Color.black.opacity(0.1), radius: 5, x: 8, y: 8)
.shadow(color: Color.white.opacity(0.2), radius: 5, x: -8, y: -8)
}
}.frame(width: UIScreen.main.bounds.width)
.background(Image("background").resizable().scaledToFill().clipped())
}
}
struct AddTemperature1_Previews: PreviewProvider {
static var previews: some View {
AddTemperature1()
}
}]
ForEach 列表 50...120
由整数组成,而不是字符串。所以你的 selection
需要是一个 Int,而不是一个 String。这是对您的示例的重写:
struct ContentView: View {
@State var selection : Int = 50
var body: some View {
VStack (alignment: .center){
Picker("", selection: $selection){
ForEach(50...120, id:\.self){ i in
Text(String(i))
}
}.labelsHidden()
Text("You selected: \(selection)")
}
}
}
如果您真的希望 selection
是一个字符串,您的 ForEach 列表也需要是字符串:
struct ContentView: View {
@State var selection : String = "50"
var body: some View {
VStack (alignment: .center){
Picker("", selection: $selection){
ForEach((50...120).map(String.init), id:\.self){ i in
Text(i)
}
}.labelsHidden()
Text("You selected: \(selection)")
}
}
}
我正在尝试创建一个包含一些文本和选择器视图的模型视图。选择器视图是有条件的,并且基于状态变量进行切换。 Toggle 工作正常,但我无法查看选定的值。我使用的是简单的选择器,无法看到选定的值
点击温度值时,所选值不显示任何内容。 有什么想法吗?
import SwiftUI
struct AddTemperature1: View {
@Environment(\.presentationMode) var presentationMode
@State var selection: String = ""
@State var selectedTemperature : String = ""
@State var showHideWheel: Bool = false
var body: some View {
VStack {
HStack {
Text("Temperature")
.foregroundColor(Color.gray)
.font(.custom("Heavy Condensed", size: 20))
.padding()
HStack{
Button(action: {
self.showHideWheel.toggle()
}){
Text(selectedTemperature.count > 0 ? selectedTemperature : "Select")
.foregroundColor(Color.cclBrandBlueColor)
.font(.custom("Heavy Condensed", size: 20))
//.padding()
Image(systemName: "chevron.right") .foregroundColor(Color.cclBrandBlueColor)
.padding(.trailing)
}
}
.frame(width: (UIScreen.main.bounds.width - 60) / 2, alignment: .trailing)
.padding()
}.background(Color("Color1"))
.cornerRadius(15)
.padding(\[.top, .bottom\],10)
.shadow(color: Color.black.opacity(0.1), radius: 5, x: 8, y: 8)
.shadow(color: Color.white.opacity(0.5), radius: 5, x: -8, y: -8)
Spacer()
if self.showHideWheel {
VStack (alignment: .center){
// VStack{
Picker(selection: $selection, label: Text("")){
ForEach(50...120, id:\.self){ i in
Text("\(i)").tag(i)
}
}.labelsHidden()
Text("You selected: \(selection)")
}.background(Color("Color1"))
.cornerRadius(25)
.frame(width: (UIScreen.main.bounds.width - 20), alignment: .center)
// .padding(\[.top, .bottom\],10)
.shadow(color: Color.black.opacity(0.1), radius: 5, x: 8, y: 8)
.shadow(color: Color.white.opacity(0.2), radius: 5, x: -8, y: -8)
}
}.frame(width: UIScreen.main.bounds.width)
.background(Image("background").resizable().scaledToFill().clipped())
}
}
struct AddTemperature1_Previews: PreviewProvider {
static var previews: some View {
AddTemperature1()
}
}]
ForEach 列表 50...120
由整数组成,而不是字符串。所以你的 selection
需要是一个 Int,而不是一个 String。这是对您的示例的重写:
struct ContentView: View {
@State var selection : Int = 50
var body: some View {
VStack (alignment: .center){
Picker("", selection: $selection){
ForEach(50...120, id:\.self){ i in
Text(String(i))
}
}.labelsHidden()
Text("You selected: \(selection)")
}
}
}
如果您真的希望 selection
是一个字符串,您的 ForEach 列表也需要是字符串:
struct ContentView: View {
@State var selection : String = "50"
var body: some View {
VStack (alignment: .center){
Picker("", selection: $selection){
ForEach((50...120).map(String.init), id:\.self){ i in
Text(i)
}
}.labelsHidden()
Text("You selected: \(selection)")
}
}
}