【问题标题】:SwiftUI - Form Picker - How to prevent navigating back on selected?SwiftUI - 表单选择器 - 如何防止在选定时导航回来?
【发布时间】:2021-10-16 16:01:54
【问题描述】:

我正在使用 SwiftUI 实现 Form 和 Picker。当我选择 Picker 选项时,它会自动导航回 Form 屏幕,如何让它留在选择屏幕中?

代码:

struct ContentView: View {
    @State private var selectedStrength = "Mild"
    let strengths = ["Mild", "Medium", "Mature"]

    var body: some View {
        NavigationView {
            Form {
                Section {
                    Picker("Strength", selection: $selectedStrength) {
                        ForEach(strengths, id: \.self) {
                            Text($0)
                        }
                    }
                }
            }
            .navigationTitle("Select your cheese")
        }
    }
}

实际:

预期:(来自 Iphone 设置的示例)

【问题讨论】:

    标签: swift forms swiftui picker


    【解决方案1】:

    您可能需要制作一个模仿选取器外观的自定义视图:

    struct ContentView: View {
    
        let strengths = ["Mild", "Medium", "Mature"]
        
        @State private var selectedStrength = "Mild"
        
        var body: some View {
            NavigationView {
                Form {
                    Section {
                        NavigationLink(destination: CheesePickerView(strengths: strengths, selectedStrength: $selectedStrength)) {
                            HStack {
                                Text("Strength")
                                Spacer()
                                Text(selectedStrength)
                                    .foregroundColor(.gray)
                            }
                        }
                    }
                }
                .navigationTitle("Select your cheese")
            }
        }
    }
    
    struct CheesePickerView: View {
        
        let strengths: [String]
        @Binding var selectedStrength: String
    
        var body: some View {
            Form {
                Section {
                    ForEach(0..<strengths.count){ index in
                        HStack {
                            Button(action: {
                                selectedStrength = strengths[index]
                            }) {
                                HStack{
                                    Text(strengths[index])
                                        .foregroundColor(.black)
                                    Spacer()
                                    if selectedStrength == strengths[index] {
                                        Image(systemName: "checkmark")
                                            .foregroundColor(.blue)
                                    }
                                }
                            }.buttonStyle(BorderlessButtonStyle())
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢!我认为这是唯一的方法。
    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2014-12-17
    • 2016-02-12
    • 2011-12-20
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多