Swiftui 在TabView中重置NagivationView堆栈
我有一个带有两个选项卡(选项卡a和B)的选项卡视图 单击选项卡A打开主视图。在主视图中有一个指向第1页的导航链接。在第1页中还有一个指向第2页的链接。 当用户在第1页或第2页时,我点击选项卡A,它不会恢复到主视图。类似地,如果用户再次单击选项卡B和选项卡A,它将返回到第1页或第2页(无论用户在哪个页面),而不是主视图 如何在这两种情况下重置导航堆栈Swiftui 在TabView中重置NagivationView堆栈,swiftui,tabview,swiftui-navigationlink,Swiftui,Tabview,Swiftui Navigationlink,我有一个带有两个选项卡(选项卡a和B)的选项卡视图 单击选项卡A打开主视图。在主视图中有一个指向第1页的导航链接。在第1页中还有一个指向第2页的链接。 当用户在第1页或第2页时,我点击选项卡A,它不会恢复到主视图。类似地,如果用户再次单击选项卡B和选项卡A,它将返回到第1页或第2页(无论用户在哪个页面),而不是主视图 如何在这两种情况下重置导航堆栈 谢谢 这是因为视图不会被重新渲染。以下是实现您行为的可能方法: 您可以对选项卡视图使用ProxyBinding来检测更改,然后通过更改内部状态变量来
谢谢 这是因为视图不会被重新渲染。以下是实现您行为的可能方法: 您可以对选项卡视图使用ProxyBinding来检测更改,然后通过更改内部状态变量来重置NavigationLink
struct ContentView: View {
@State var activeView: Int = 0
@State var showNavigation: Bool = false
var body: some View {
TabView(selection: Binding<Int>(
get: {
activeView
}, set: {
activeView = $0
showNavigation = false //<< when pressing Tab Bar Reset Navigation View
}))
{
NavigationView {
NavigationLink("Click", destination: Text("Page A"), isActive: $showNavigation)
}
.tabItem {
Image(systemName: "1.circle")
Text("First")
}
.tag(0)
Text("Second View")
.padding()
.tabItem {
Image(systemName: "2.circle")
Text("Second")
}
.tag(1)
}
}
}
struct ContentView:View{
@状态变量activeView:Int=0
@状态变量showNavigation:Bool=false
var body:一些观点{
选项卡视图(选择:绑定)(
获取:{
动态视图
},集:{
动态视图=$0
showNavigation=false/您可以使用MainView创建RootView
import SwiftUI
struct RootView: View {
@ObservedObject var viewModel = RootViewModel()
init(){
viewModel.prepare()
}
var body: some View {
MainView(tab: viewModel.mainTab)
.id(UUID().uuidString)
}
}
使用监听器创建RootViewModel,以更新屏幕
import SwiftUI
class RootViewModel: ObservableObject{
@Published var mainTab: SelectedTab = .firstTab
let mainScreenNotification = NSNotification.Name("mainScreenNotification")
private var observerMain: Any?
func prepare(){
observerMain = NotificationCenter.default.addObserver(forName: mainScreenNotification, object: nil, queue: nil, using: { [unowned self] notification in
self.mainTab = (notification.userInfo?["selectedTab"])! as! SelectedTab
})
}
}
enum SelectedTab {
case firstTab, secondTab
}
运行此命令以从选项卡子项中展开新选项卡屏幕:
NotificationCenter.default.post(name:
NSNotification.Name("mainScreenNotification"),
object: nil,
userInfo: ["selectedTab": SelectedTab.firstTab]
)
问得好,但如果能看到一些SwiftUI代码也会很有用。非常感谢。它确实满足了我的需要。但是,我现在在导航视图中有6个导航链接,每个链接指向不同的目标视图。当我通过链接导航到一个视图时,再次单击选项卡(重置导航堆栈),然后导航到另一个视图,目标不是我所期望的。您上面提供的代码是否导致了这种情况?谢谢!