如何让SwiftUI的NavigationTitle绑定枚举并唤起选择器视图?
SwiftUI导航标题绑定枚举并唤起选择器的实现方案
.navigationTitle()本身只接受String或遵循StringProtocol的类型,直接绑定@State枚举变量(比如$viewType)是行不通的——它不支持绑定类型输入,也不会自动生成选择器。要实现点击标题唤起选择器切换枚举值的效果,需要自定义导航栏标题视图。
具体实现
- 保留你的枚举定义:
enum LibraryViewType: String, CaseIterable { case albums, songs, artists }
- 替换默认导航标题,用自定义控件实现交互:
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
相关产品推荐
相关产品推荐

