Ich habe nun zum ersten mal den Picker unter SwiftUI verwendet. Einfache Erkenntnis – das OS entscheidet, welche Erscheinung Dein Picker annimmt. Natürlich kannst Du das auch selber entscheiden. Nun hatte ich aber das seltsame verhalten, dass bei der Auswahl eines Eintrags von 5 Pickern, alle Picker durchlaufen wurden. Meine Picker sind in in einer Form. Um da Form ein NavigationView. Lösung des Problems war die Section. Dieses Beispiel ist für Copy-Paste nicht geeignet, weil Dir die Datenquelle fehlt. Das soll lediglich der Veranschaulichung dienen.
import SwiftUI struct ContentView: View { @State public var selectedCrossSection = 0 @State private var selectedColor = 0 @State private var selectedLength = 0 @State private var selectedEyelet1 = 0 @State private var selectedEyelet2 = 0 var selCrossSectionStr = "" @ObservedObject var oListDatasource = ListDataSource() var body: some View { NavigationView{ VStack (spacing: 10) { Form { Section { Picker(selection: self.$selectedCrossSection, label: Text("Querschnitt")) { ForEach(self.oListDatasource.CrossSections, id: \.self) { item in Text(item.CrossSection).tag(item.rowIndex) } } //.pickerStyle(SegmentedPickerStyle()).foregroundColor(Color.orange) .font(Font.custom("ArialMT", size: 12)) .onReceive([self.selectedCrossSection].publisher.first()) { (value) in print(self.oListDatasource.CrossSections[self.selectedCrossSection].CrossSection) } } Section { Picker(selection: self.$selectedColor, label: Text("Farbe")) { ForEach(self.oListDatasource.Colors) { item in Text(item.Color).tag(item.rowIndex) } } //.pickerStyle(SegmentedPickerStyle()).foregroundColor(Color.orange) .font(Font.custom("ArialMT", size: 12)) } Section { Picker(selection: self.$selectedLength, label: Text("Länge")) { ForEach(self.oListDatasource.Lengths) { item in Text(item.Length).tag(item.rowIndex) } } .font(Font.custom("ArialMT", size: 12)) } Section { Picker(selection: $selectedEyelet1, label: Text("Öse 1")) { ForEach(oListDatasource.Eyelets) { item in Text(item.Eyelet).tag(item.rowIndex) } } .font(Font.custom("ArialMT", size: 12)) } Section { Picker(selection: $selectedEyelet2, label: Text("Öse 2")) { ForEach(oListDatasource.Eyelets) { item in Text(item.Eyelet).tag(item.rowIndex) } } .font(Font.custom("ArialMT", size: 12)) } } NavigationLink(destination: ListItems(selectedCrossSection: selectedCrossSection)) { Text("Liste").frame(width: 100) } } .navigationBarTitle("Kabelshop") } } }
Hier die Verfügbaren Styles
- Navigation view style.
- Wheel picker.
- Segmented picker.
- Date picker style.
Über den Autor