如何使侧边栏行还记得其先前的细节查看split视图Swiftui MAC催化剂的进度?

发布于 2025-02-07 03:06:34 字数 3429 浏览 2 评论 0原文

我正在使用SwiftUI MacCatalyst中的NavigationView创建拆分视图。在侧边栏(主视图)中,我有两个行:“添加”和“配置文件”。攻击它们会更改细节视图。

假设我单击“添加”行,在详细视图中看到AddView()。

然后我点击“下一个1'”按钮在导航堆栈上显示'tempview 1'。

现在,我在侧边栏中点击'配置文件'行。

当我点击一个'再次在侧边栏中添加行时,我看到了:

而不是这个:

有人知道如何在Swiftui中保留splitview的行阶段吗?我的示例代码下面:

import SwiftUI

struct AddView: View {
    @State var showNext = false
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: TempView1(), isActive: $showNext) { EmptyView() }
                
                Button("Next 1") {
                    showNext = true
                }
                
                Text("Add View")
                    .padding()
            }
        }
        .navigationViewStyle(.stack)
    }
}

struct ProfileView: View {
    @State var showNext = false
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: TempView2(), isActive: $showNext) { EmptyView() }
                
                Button("Next 2") {
                    showNext = true
                }
                Text("Profile View")
            }
        }
        .navigationViewStyle(.stack)
    }
}

struct TempView1 : View {
    var body: some View {
        Text("Temp View 1")
    }
}

struct TempView2 : View {
    var body: some View {
        Text("Temp View 2")
    }
}

struct ContentView: View {
    @State var showAddView = false
    @State var showProfileView = false
    @State var selectedRow = -1
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: AddView(), isActive: $showAddView) { EmptyView() }
                NavigationLink(destination: ProfileView(), isActive: $showProfileView) { EmptyView() }
                List {
                    Text("Add")
                        .padding()
                        .background(selectedRow == 0 ? Color.yellow : Color.clear)
                        .onTapGesture {
                            selectedRow = 0
                            showAddView = true
                        }
                    Text("Profile")
                        .padding()
                        .background(selectedRow == 1 ? Color.yellow : Color.clear)
                        .onTapGesture {
                            selectedRow = 1
                            showProfileView = true
                        }
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

I am creating Split View with NavigationView in SwiftUI MacCatalyst. In sidebar (master view), I have two rows: 'Add' and 'Profile'. Tapping on them changes the detail view.

Suppose I click on 'Add' row, I see AddView() in detail view.
First Tap

Then I tap 'Next 1' button to show 'TempView 1' on navigation stack.
Second Tap

Now, I tap on 'Profile' row in sidebar.
Third Tap

And when I tap one 'Add' row in sidebar again, I see this:
Fourth Tap

instead of this:
Second Tap

Does anyone know how to preserve row stages for SplitView in SwiftUI? My sample code below:

import SwiftUI

struct AddView: View {
    @State var showNext = false
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: TempView1(), isActive: $showNext) { EmptyView() }
                
                Button("Next 1") {
                    showNext = true
                }
                
                Text("Add View")
                    .padding()
            }
        }
        .navigationViewStyle(.stack)
    }
}

struct ProfileView: View {
    @State var showNext = false
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: TempView2(), isActive: $showNext) { EmptyView() }
                
                Button("Next 2") {
                    showNext = true
                }
                Text("Profile View")
            }
        }
        .navigationViewStyle(.stack)
    }
}

struct TempView1 : View {
    var body: some View {
        Text("Temp View 1")
    }
}

struct TempView2 : View {
    var body: some View {
        Text("Temp View 2")
    }
}

struct ContentView: View {
    @State var showAddView = false
    @State var showProfileView = false
    @State var selectedRow = -1
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: AddView(), isActive: $showAddView) { EmptyView() }
                NavigationLink(destination: ProfileView(), isActive: $showProfileView) { EmptyView() }
                List {
                    Text("Add")
                        .padding()
                        .background(selectedRow == 0 ? Color.yellow : Color.clear)
                        .onTapGesture {
                            selectedRow = 0
                            showAddView = true
                        }
                    Text("Profile")
                        .padding()
                        .background(selectedRow == 1 ? Color.yellow : Color.clear)
                        .onTapGesture {
                            selectedRow = 1
                            showProfileView = true
                        }
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文