ios - 具有不同目的地的 SwiftUI 导航栏项
问题描述
我有一个带有添加按钮(NavigationBarItem)的导航视图,并希望在每个选项卡中设置导航栏项目的不同目的地。
enum Tab: String {
case income = "Income"
case expenses = "Expenses"
case budgets = "Budget"
case investment = "Investment"
case assets = "Asset"
}
我已经尝试将视图作为原始值提供给结构,但这是不可能的。我怎样才能做到这一点?
var body: some View {
NavigationView {
TabView(selection: $selection) {
Text("Place Holder Income")
.tabItem {
Label("Income", systemImage: "star")
}
.tag(Tab.income)
.navigationBarHidden(false)
ExpensesView()
.tabItem {
Label("Expenses", systemImage: "star")
}
.tag(Tab.expenses)
.navigationBarHidden(false)
Text("Place Holder Budgets")
.tabItem {
Label("Budgets", systemImage: "star")
}
.tag(Tab.budgets)
.navigationBarHidden(false)
Text("Place Holder Investment")
.tabItem {
Label("Investment", systemImage: "star")
}
.tag(Tab.investment)
.navigationBarHidden(false)
Text("Place Holder Assets")
.tabItem {
Label("Assets", systemImage: "star")
}
.tag(Tab.assets)
.navigationBarHidden(false)
}
.navigationTitle(selection.rawValue)
.navigationBarItems(
trailing:
NavigationLink("Add", destination: AddExpensesView())
)
}
}
解决方案
您可以添加一个功能(在您的视图中),该功能路由到正确的目的地(取决于“选择”属性的值)。
@ViewBuilder func addView() -> some View {
switch selection {
case .income: Text("Income destination")
case .expenses: Text("Expenses destination")
default: Rectangle()
}
}
您NavigationLink
将此视图构建器称为:
NavigationLink("Add", destination: addView())
推荐阅读
- node.js - 如何修复nodejs exec中的“xinit:无法连接到X服务器”
- visual-studio-2015 - 新创建的 SSIS 包未显示在解决方案资源管理器中,能够在包位置看到 .dtsx 文件
- ios - Swift:TableViewCell 选中时突出显示整个单元格,而不是仅图像视图
- matlab - 在 MATLAB 中导入 csv 数据时遇到问题
- mysql - 在 SELECT 内使用 SELECT 返回 null
- javascript - 在引导程序 2.3.2 弹出窗口中使用变量
- android - 仅在单击选项卡时加载片段
- dropbox - 业务 API:/files/list_folder 中未返回 shared_info 对象
- sql - 雪花模式导致多行
- reactjs - 已经绑定到组件的函数仍然显示错误 Uncaught TypeError: _this4.handleDeleteItem is not a function