Einen Enum-Wert via Picker auswählen - SwiftUI Beispiele

von @ralfebert · aktualisiert am 26. Juli 2021

Die Auswahl eines Enum-Wertes lässt sich mit einem ↗ Picker-View bewerkstelligen.

Dafür wird für das folgende Beispiel ein Enum für eine Kartenspiel-Farbe definiert:

enum CardSuit: String, CaseIterable {
    case diamonds
    case clubs
    case hearts
    case spades
}

Auswahl mit SegmentedPickerStyle

struct EnumPickerExampleView: View {
    @State var suit: CardSuit = .diamonds

    var body: some View {
        Picker(suit.rawValue, selection: $suit) {
    ForEach(CardSuit.allCases, id: \.self) { suit in
        Text(suit.rawValue)
            .tag(suit)
    }
}
.pickerStyle(MenuPickerStyle())
    }
}

Auswahl mit MenuPickerStyle

Picker(suit.rawValue, selection: $suit) {
    ForEach(CardSuit.allCases, id: \.self) { suit in
        Text(suit.rawValue)
            .tag(suit)
    }
}
.pickerStyle(MenuPickerStyle())

Auswahl mit Menu

Alternativ kann auch ein ↗ Menu-View verwendet werden:

Menu(
    content: {
        ForEach(CardSuit.allCases, id: \.self) { suit in
            Button(suit.rawValue) {
                self.suit = suit
            }
        }
    },
    label: {
        Text(self.suit.rawValue)
    }
)

Auswahl als Kontextmenü

Mit einem Kontextmenü erscheint das Auswahlmenü erst nach einem Long Press auf das Element:

Text(self.suit.title)
    .contextMenu {
        ForEach(CardSuit.allCases, id: \.self) { suit in
            Button(suit.title) {
                self.suit = suit
            }
        }
    }