[英]SwiftUI how TabView is implemented underneath
我考虑了如何在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()
}
但是最后一个选择似乎更难实现
好的,我有一个简单的版本,确实具有类似TabView的API。 我已经使用Preferences和TupleView实现了这一点。
当前尚未解决的一件事是如何处理组。
这是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)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.