如何以编程方式在单击按钮时切换选项卡?在swiftui

时间:2020-09-04 12:54:23

标签: ios swiftui uitabbar tabbar swiftui-navigationlink

我已经在代码中实现了标签栏。我在第一个选项卡中看到了所有按钮,并且希望从该按钮以编程方式切换到第二个选项卡。当我使用navigationView时,它将创建另一个标签栏并移至该屏幕,这将更改swiftui中的导航索引。

struct AppTabNavigation: View {
    @State var selection: Tab = .dashboard

    var body: some View {
        TabView(selection: $selection) {
            NavigationView {
                FirstTabView()
            }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            .navigationViewStyle(StackNavigationViewStyle())
            
            .tabItem {
                Label("Home", systemImage: "house.fill")
                    .accessibility(label: Text("Home"))
            }
            .tag(Tab.home)
            NavigationView {
                SecondView()
            }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            .navigationViewStyle(StackNavigationViewStyle())
            
            .tabItem {
                Label("Home", systemImage: "house.fill")
                    .accessibility(label: Text("Home"))
            }
            .tag(second) 
        }
     }
   }

导航代码:

NavigationLink(destination: AppTabNavigation(selection: Tab.home), isActive: self.$isActiveTabbar){
    Text("")
} .isDetailLink(false)

1 个答案:

答案 0 :(得分:2)

这里是一种可能方法的演示-想法是将带有选项卡选择的绑定移动到带有按钮的视图中,以便按钮动作可以更改它。

通过Xcode 12 / iOS 14测试

enum Tab {
    case dashboard
    case home
    case second
}

struct AppTabNavigation: View {
    @State var selection: Tab = .home

    var body: some View {
        TabView(selection: $selection) {
            NavigationView {
                FirstTabView(tab: $selection)
            }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            .navigationViewStyle(StackNavigationViewStyle())
            .tabItem {
                Label("Home", systemImage: "house.fill")
                    .accessibility(label: Text("Home"))
            }
            .tag(Tab.home)

            NavigationView {
                Text("SecondView")
            }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            .navigationViewStyle(StackNavigationViewStyle())

            .tabItem {
                Label("Home", systemImage: "house.fill")
                    .accessibility(label: Text("Home"))
            }
            .tag(Tab.second)
        }
    }
}

struct FirstTabView: View {
    @Binding var tab: Tab
    var body: some View {
        Button("Go Second") { self.tab = .second }
    }
}