Picker issue when selecting a nested Picker
11:47 06 May 2026

I started with the following code which shows a Picker :

import SwiftUI

struct ContentView: View {
    enum MenuOption: String, CaseIterable {
        case sort = "Sort"
        case search = "Search"
        case somethingElse = "Something Else"
    }

    @State var selectedOption: MenuOption = .sort

    var body: some View {
        Picker("", selection: $selectedOption) {
            ForEach(MenuOption.allCases, id: \.self) {
                Text($0.rawValue)
            }
        }
        .pickerStyle(.menu)
    }
}

This works fine.

Now, I want to add a submenu for case sort, showing two options, so I tried something like this:

struct ContentView: View {
    enum MenuOption: String, CaseIterable {
        case sort = "Sort"
        case search = "Search"
        case somethingElse = "Something Else"
    }
    
    enum SortOption: String, CaseIterable {
        case date = "Date"
        case title = "Title"
    }

    @State var selectedOption: MenuOption = .sort
    @State var selectedSort: SortOption = .date

    var body: some View {
        Picker("", selection: $selectedOption) {
            ForEach(MenuOption.allCases, id: \.self) {
                if $0 == .sort {
                    Picker("Sort", selection: $selectedSort) {
                        ForEach(SortOption.allCases, id: \.self) {
                            Text($0.rawValue)
                        }
                    }
                    .pickerStyle(.menu)

                }
                else {
                    Text($0.rawValue)
                }
            }
        }
        .pickerStyle(.menu)
        .controlSize(.small)
    }
}

It looks ok at first sight, but if e.g. "Search" is selected, and I then hover to Sort > Date, I would expect that the picker shows "Sort", but it stays at "Search".

How can I fix this?

macos swiftui picker submenu