提问人:amelia 提问时间:11/11/2023 最后编辑:amelia 更新时间:11/11/2023 访问量:32
当选项卡之间的视图相同时,如何使用导航路径?
How to use navigation paths when views are the same across tabs?
问:
我有一个最高级别的选项卡视图,现在只有一个视图具有导航路径,因为我正在努力添加其他视图,但我首先遇到了一个阻止程序。我计划每个选项卡视图都有自己的路径。
因此,我的提要视图可以导航到我的配置文件视图,该视图可以导航到我所有选项卡下的子视图。几乎每个视图都可以存在于每个选项卡视图下,甚至可能多次存在。我希望该应用程序能够随时随地轻松访问您需要的任何内容。
我有一个枚举来浏览 feedviews 路径下的所有子视图。然后,在每个视图中,我使用: .但是,如果我的个人资料视图中的导航链接包含,那么当相同的导航链接的来源路径不是 FeedNavigation 时,我该如何重用它?NavigationLink(value: FeedNavigation.profile(user))
FeedNavigation.profile(user)
我试图减少代码量,因为我认为这个问题是一个更广泛的概念,而不是修复我的实际代码。
示例:源视图 -> 个人资料视图 -> 书籍视图(FeedNavigation 路径)
示例 2:配置文件视图 -> 书籍视图 -> 可能返回到源视图(想要创建 ProfileNavigation 路径)
两个剖面图视图具有相同的导航链接,用于访问下一个视图。因此,如果我将链接绑定到特定路径,则该路径并不总是我到达那里的方式。profileview
class NavigationManager: ObservableObject {
@Published var feedPath = [FeedNavigation]()
enum FeedNavigation: Hashable, Codable {
case profile(User)
case notification
case chat
}
}
TabView(selection: $currentTab) {
NavigationStack(path: $navigationManager.feedPath) {
FeedView()
}
.tag(Tabs.feed)
NavigationStack() {
SearchView()
}
.tag(Tabs.search)
NavigationStack() {
ProfileView(user: user)
}
.tag(Tabs.profile)
}
struct FeedView: View {
@EnvironmentObject var navigationManager: NavigationManager
var body: some View {
NavigationLink(value: FeedNavigation.profile(user)) {
Text("Click to see user's profile")
}
.navigationDestination(for: FeedNavigation.self) { state in
switch state {
case .profile(let user):
ProfileView(user: user)
case .notification:
NotificationsView()
case .chat:
ConversationsView()
}
}
}
struct ProfileView: View {
var body: some View {
NavigationLink(value: FeedNavigation.notifications)) {
Text("Go to notifications")
}
}
}
在此示例代码中,现在我的所有配置文件链接都具有 FeedNavigation 路径,即使配置文件视图需要自己的路径,因为它是自己的选项卡视图。
答: 暂无答案
评论
FeedNavigation
NavigationManager