import SwiftUI
struct ContentView: View {
enum Category: String, CaseIterable, Identifiable {
case typeA, typeB, typeC
var id: Self { self }
}
enum Option: String, CaseIterable, Identifiable {
case a1, a2, b1, b2, c1, c2
var id: Self { self }
}
@State private var selectedCategory: Category = .typeA
@State private var selectedOption: Option = .a1
var availableOptions: [Option] {
switch selectedCategory {
case .typeA: return [.a1, .a2]
case .typeB: return [.b1, .b2]
case .typeC: return [.c1, .c2]
}
}
var body: some View {
Form {
Section(header: Text("Selection")) {
HStack {
Picker("", selection: $selectedCategory) {
ForEach(Category.allCases) { category in
Text(category.rawValue.capitalized).tag(category)
}
}
.labelsHidden()
.pickerStyle(.menu)
Spacer()
Picker("", selection: $selectedOption) {
ForEach(availableOptions) { option in
Text(option.rawValue.uppercased()).tag(option)
}
}
.labelsHidden()
.pickerStyle(.menu)
}
}
}
.onChange(of: selectedCategory, { oldValue, newValue in
if !availableOptions.contains(selectedOption), let firstOption = availableOptions.first {
selectedOption = firstOption
}
})
}
}
#Preview {
ContentView()
}
А и вот результат:
Почему оба текста. Заполнить опционер после того, как выбранное значение в категории, выпивчик, изменился (в настоящее время я делаю это в методе OnChange )? Это происходит только на моем iPhone 14 с установленным iOS 18.5. Я удалил все и оставил только один сборщик типа .menu с тремя текстовыми полями, и он по -прежнему ведет себя одинаково. Таким образом, кажется, что это либо мой телефон, либо сама операционная система. Я надеюсь, что кто -то сможет это подтвердить.
enum Option: String, CaseIterable, Identifiable { case a1, a2, b1, b2, c1, c2 var id: Self { self } }
@State private var selectedCategory: Category = .typeA @State private var selectedOption: Option = .a1
var availableOptions: [Option] { switch selectedCategory { case .typeA: return [.a1, .a2] case .typeB: return [.b1, .b2] case .typeC: return [.c1, .c2] } }
var body: some View { Form { Section(header: Text("Selection")) { HStack { Picker("", selection: $selectedCategory) { ForEach(Category.allCases) { category in Text(category.rawValue.capitalized).tag(category) } } .labelsHidden() .pickerStyle(.menu)
Spacer()
Picker("", selection: $selectedOption) { ForEach(availableOptions) { option in Text(option.rawValue.uppercased()).tag(option) } } .labelsHidden() .pickerStyle(.menu) } } } .onChange(of: selectedCategory, { oldValue, newValue in if !availableOptions.contains(selectedOption), let firstOption = availableOptions.first { selectedOption = firstOption } }) } }
#Preview { ContentView() } [/code] А и вот результат:
Почему оба текста. Заполнить опционер после того, как выбранное значение в категории, выпивчик, изменился (в настоящее время я делаю это в методе OnChange )? Это происходит только на моем iPhone 14 с установленным iOS 18.5. Я удалил все и оставил только один сборщик типа .menu с тремя текстовыми полями, и он по -прежнему ведет себя одинаково. Таким образом, кажется, что это либо мой телефон, либо сама операционная система. Я надеюсь, что кто -то сможет это подтвердить.