swiftui - 从另一个视图接收选定的 TabView - SwiftUI
问题描述
我正在尝试使用 tabView 制作一个 swiftui 应用程序。我希望标签视图正常工作,但所选标签可能来自第一页第一个视图
struct ContentView: View {
@State var selectedTab = 0
var body: some View {
VStack{
NavigationView{
VStack(alignment: .center, spacing: 0){
Spacer()
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "book")
Text("Enseignements")
}
}
HStack{
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "list.dash")
Text("Étapes")
}
}
Image(systemName: "map")
.resizable()
.frame(width: 150, height: 150, alignment: .center)
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "photo.on.rectangle")
Text("Album")
}
}
}
NavigationLink(destination: AccueilView(selectedTab: self.$selectedTab)){
VStack{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}
}
Spacer()
}
.edgesIgnoringSafeArea(.bottom)
}
}
}
}
第二种观点
struct AccueilView: View {
@Binding var selectedTab: Int
var body: some View {
TabView(selection: $selectedTab) {
EtapeView(card: Card.example)
.tabItem {
Image(systemName: "list.dash")
Text("Étapes")
}
.tag(0)
AlbumView()
.tabItem {
Image(systemName: "photo.on.rectangle")
Text("Album")
}
.tag(1)
TeachingView(card: Card.example)
.tabItem{
Image(systemName: "book")
Text("Enseignements")
}
.tag(2)
ChronicView(card: Card.example)
.tabItem{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}.tag(3)
}
}
}
我希望 ContentView 将 selectedTab 传递给 AccueilView,而 AccueilView 不会更改 tabView 正常状态。例如:如果我在 ContenView 中单击“专辑”,我会直接进入 AccueilView 中的专辑等,例如,从专辑中我可以进入 chronique。谢谢你的帮助
解决方案
如果我正确理解了您的目标,这是可能的方法。
使用 Xcode 12 / iOS 14 测试
修改后的代码:
struct TestNavigateToTab: View {
var body: some View {
VStack{
NavigationView{
VStack(alignment: .center, spacing: 0){
Spacer()
NavigationLink(destination: AccueilView(selectedTab: 2)){
VStack{
Image(systemName: "book")
Text("Enseignements")
}
}
HStack{
NavigationLink(destination: AccueilView(selectedTab: 0)){
VStack{
Image(systemName: "list.dash")
Text("Étapes")
}
}
Image(systemName: "map")
.resizable()
.frame(width: 150, height: 150, alignment: .center)
NavigationLink(destination: AccueilView(selectedTab: 1)){
VStack{
Image(systemName: "photo.on.rectangle")
Text("Album")
}
}
}
NavigationLink(destination: AccueilView(selectedTab: 3)){
VStack{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}
}
Spacer()
}
.edgesIgnoringSafeArea(.bottom)
}
}
}
}
struct AccueilView: View {
@State var selectedTab: Int
init(selectedTab: Int) {
_selectedTab = State(initialValue: selectedTab)
}
var body: some View {
TabView(selection: $selectedTab) {
Text("EtapeView")
.tabItem {
Image(systemName: "list.dash")
Text("Étapes")
}
.tag(0)
Text("AlbumView")
.tabItem {
Image(systemName: "photo.on.rectangle")
Text("Album")
}
.tag(1)
Text("TeachingView")
.tabItem{
Image(systemName: "book")
Text("Enseignements")
}
.tag(2)
Text("ChronicView")
.tabItem{
Image(systemName: "square.stack.3d.down.right")
Text("Chroniques")
}.tag(3)
}
}
}
推荐阅读
- java - 清单合并失败:需要明确指定 android:exported
- javascript - 新输入不会更改子组件上的 FormGroup 禁用属性
- javascript - 将字符串转换为数组后,查找字符串中最长的单词
- c++ - 还有其他更强大的设置桌面背景图像的方法吗?
- python - Scoll 不适用于 IOS Appium 自动化
- reactjs - React中的垂直切换按钮组?
- angular - 离线添加数据AngularFire而不加载
- reactjs - axios get/post 无法访问 Fast API
- python - 点安装模块
- javascript - 如何根据 CSV 文件中的数据更新页面上的数据,而不是使用页面上的固定元素数据?