You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SwiftUI的NavigationTitle绑定枚举并唤起选择器视图?

SwiftUI导航标题绑定枚举并唤起选择器的实现方案

.navigationTitle()本身只接受String或遵循StringProtocol的类型,直接绑定@State枚举变量(比如$viewType)是行不通的——它不支持绑定类型输入,也不会自动生成选择器。要实现点击标题唤起选择器切换枚举值的效果,需要自定义导航栏标题视图。

具体实现

  1. 保留你的枚举定义:
enum LibraryViewType: String, CaseIterable {
    case albums, songs, artists
}
  1. 替换默认导航标题,用自定义控件实现交互:
struct LibraryView: View {
    @State private var viewType: LibraryViewType = .albums
    
    var body: some View {
        // 你的主视图内容
        Text("当前视图:\(viewType.rawValue)")
            .navigationBarTitleDisplayMode(.inline)
            .toolbar {
                ToolbarItem(placement: .principal) {
                    // 下拉菜单样式的选择器
                    Picker("切换视图类型", selection: $viewType) {
                        ForEach(LibraryViewType.allCases, id: \.self) { type in
                            Text(type.rawValue.capitalized)
                        }
                    }
                    .pickerStyle(.menu)
                }
            }
    }
}

可选的自定义交互样式

如果想要更灵活的菜单样式,也可以用Menu组件实现:

ToolbarItem(placement: .principal) {
    Menu {
        ForEach(LibraryViewType.allCases, id: \.self) { type in
            Button(type.rawValue.capitalized) {
                viewType = type
            }
        }
    } label: {
        Text(viewType.rawValue.capitalized)
            .font(.headline)
    }
}

内容的提问来源于stack exchange,提问作者Halpo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:57:05