【问题标题】:Dynamically set SwiftUI NavigationBarItems?动态设置 SwiftUI NavigationBarItems?
【发布时间】:2021-01-25 02:48:59
【问题描述】:

如何动态更改 SwiftUI 导航栏项?

我在 NavigationView 中有一个 TabView,我希望导航栏项根据所选的选项卡进行更改。但是,我很难确定如何使用 .onAppear() 进行更改,假设这甚至是您应该做的。

我的代码目前布局如下:

var body: some View {
        NavigationView {
            TabView {
                contentWithNavigationButtons()
                    .tabItem {
                        Image(systemName: "house")
                        Text("Buttons")
                    }
                
                contentWithoutNavigationButtons()
                    .tabItem {
                        Image(systemName: "person")
                        Text("No Buttons")
                    }
                    .onAppear {
                        //Navigation Bar Items should be removed
                    }
                
            }
            .navigationBarItems(trailing: someButton)
        }

【问题讨论】:

    标签: swiftui swiftui-navigationview swiftui-tabview


    【解决方案1】:

    这是一个可能的解决方案的演示 - 为标签添加跟踪选择并根据标签选择制作按钮。使用 Xcode 12 / iOS 14 测试

    struct DemoView: View {
        @State private var selection = 0    // << here !!
        var body: some View {
            NavigationView {
                TabView(selection: $selection) {
                    contentWithNavigationButtons()
                        .tabItem {
                            Image(systemName: "house")
                            Text("Buttons")
                        }.tag(0)                // << here !!
                    
                    contentWithoutNavigationButtons()
                        .tabItem {
                            Image(systemName: "person")
                            Text("No Buttons")
                        }.tag(1)
                    
                }
                .navigationBarItems(trailing: Group {
                    if selection == 0 {     // << here !!
                        Button("Some"){}
                    }
                })
            }
        }
    }
    

    【讨论】:

    • 将导航栏项目上的点击事件从父视图发送到子视图的推荐方法是什么?我能想到的解决方案:如果我有 4 个选项卡,每个选项卡有 2 个导航栏项目,我必须跟踪 8 个 bool 绑定,以便将事件从 tabview 传递到它的目的地——这对我来说有点难看:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多