【问题标题】:SwiftUI Navigation Bar Item with different destinations具有不同目的地的 SwiftUI 导航栏项
【发布时间】:2021-08-15 22:19:05
【问题描述】:

我有一个带有添加按钮 (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())
        )
    
    }
}

【问题讨论】:

  • 我认为您可以让添加按钮打开一个“AddView”并将选定的选项卡绑定传递给该视图。该视图将充当路由器视图并显示适当的添加视图(例如AddExpensesview

标签: ios swift swiftui navigation swiftui-navigationview


【解决方案1】:

您可以添加一个(在您看来)路由到正确目的地的函数(取决于“selection”属性的值)。

@ViewBuilder func addView() -> some View {
        switch selection {
        case .income: Text("Income destination")
        case .expenses: Text("Expenses destination")
        default: Rectangle()
        }
    }

您的NavigationLink 调用此视图构建器:

NavigationLink("Add", destination: addView())

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多