Невозможно получить выбранное значение из средства выбора в Swiftui - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь создать вид модели с некоторыми видами Text и Picker. Вид средства выбора является условным и переключается в зависимости от переменной состояния. 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()
    }
}]

1 Ответ

1 голос
/ 12 июля 2020

Список 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 был String, ваш список ForEach также должен был бы быть Strings:

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)")
        }
    }
}
...