SwiftUI如何在下面实现TabView

问题描述 投票:0回答:1

我考虑了如何在SwiftUI中实现TabView。

正如我所看到的,它只将@ViewBuilder及其内容带入初始化程序。

public init(selection: Binding<SelectionValue>?, @ViewBuilder content: () -> Content)

我想实现自己的自定义MyTabView,其用法类似于本机TabView的用法。但是请考虑如何将@ViewBuilder的多个视图(屏幕)传递到内容,然后基于此参数,即闭包返回Content只是有条件地显示它们!基于选择参数。

是否有一些私有实现或有可能以某种方式实现这一目标。我想规避原始的TabView有很多限制。但同时,我想坚持使用本机实现

我想使用这种方法:

MyTabView(selection: $selection, tabs: { 
    Tab1() 
    Tab2() 
    Tab3() 
}) { 
    View1()
    View2()
    View3() 
}

当然最好是拥有这样的东西

MyTabView(selection: $selection}) { 
    View1().tabItem({})
    View2().tabItem()
    View3().tabItem() 
}

但是最后一个选项似乎更难实现

swift swiftui tabview
1个回答
0
投票

好吧,我有一个简单的版本,确实具有类似TabView的API。我已经使用PreferencesTupleView来实现这一点。

目前尚未解决的一件事是如何处理网上论坛。

这里是github项目链接https://github.com/michzio/Click5Menu

以及这里示例如何使用它:

 Click5MenuView {


            Page1()
            Page2()
            Page3()

            NavigationView {
                Text("Page 4")
                    .navigationBarTitle("Page 4", displayMode: .inline)
                    .hamburgerButton()
            }
            .menuItem {
               MenuItemView(systemImage: "person", title: "Page 4")
            }
            .withTag(3)

            NavigationView {
                Text("Page 5")
                .navigationBarTitle("Page 5", displayMode: .inline)
                .hamburgerButton()
            }
            .menuItem {
                MenuItemView(systemImage: "person", title: "Page 5")
            }
            .withTag(4)

}

struct Page1 : View {

    var body: some View {

        NavigationView {
            Text("Page 1")
            .navigationBarTitle("Page 1", displayMode: .inline)
            .hamburgerButton()
        }
        .menuItem {
            MenuItemView(systemImage: "person", title: "Page 1")
        }
        .tabBarItem {
            TabItemView(systemImage: "person", title: "Page 1")
        }
        .withTag(0)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.