为什么我的注销按钮可以注销但不能切换视图

why my logout button can logout but can't switch the view

我已经设置了注销按钮。该按钮的功能是正确的,实际上可以注销。但是有一个问题:当我按下注销按钮时,我无法将页面切换到我想要的视图,即LoginsignupView。我在我的代码中找不到任何错误。

我想知道如何正确制作。

这是关于注销的代码

import SwiftUI

struct MainView: View {
    @State private var selection = 0
    
    @ObservedObject private var httpClient = HTTPUser()
    @State var isin : Bool = true
    
  
    
    
    
    var body: some View {
        
        
        
        if #available(iOS 14.0, *) {
            ZStack{
                TabView(selection: $selection){
                    profile1View()
                        .tag(0)
                        .navigationBarBackButtonHidden(true)
                        .navigationBarHidden(true)
                    //List(self.httpClient.user,id: \.id){ user in
                    profile3()
                        .tag(1)
                        .navigationBarBackButtonHidden(true)
                        .navigationBarHidden(true)
                    
                    ZStack{
                        Image("background")
                            .resizable()
                            .scaledToFill()
                            .frame(minWidth: 0, maxWidth: .infinity)
                            .edgesIgnoringSafeArea(.all)
                        
                        NavigationLink(
                            destination: LoginsignupView().navigationBarBackButtonHidden(true)
                                .navigationBarHidden(true))
                        {
                            
                            Text("logout").foregroundColor(.white)
                                .fontWeight(.bold)
                                .padding(.vertical)
                                .frame(width: UIScreen.main.bounds.width - 100)
                                .background(
                                    
                                    LinearGradient(gradient: .init(colors: [Color("Color"),Color("Color1"),Color("Color2")]), startPoint: .leading, endPoint: .trailing)
                                )
                        }
                    }
                    .tag(2)
                    .onAppear(perform: httpClient.Logout)
                    .navigationBarBackButtonHidden(true)
                    .navigationBarHidden(true)
    
                }
                .zIndex(0)
                .onAppear{
                    UITabBar.appearance().barTintColor = .white
                }
            }
        }
        if #available(iOS 14.0, *) {
            TabBarView(selection: $selection)
                .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
        } else {
            // Fallback on earlier versions
        }
        
        Divider()
        
    }
}

struct MainView_Previews: PreviewProvider {
    static var previews: some View {
        MainView()
    }
}

如果意图是在按下“注销”后推送 LoginSignupView,那么您需要在视图层次结构中的某处添加 NavigationViewNavigationLink 本身不会做太多事情。

但是,从您的代码看来,您在显示最后一个选项卡后执行了注销。在这种情况下,您可能还想将现有的 NavigationLink 绑定到布尔值 属性。例如,您的选项卡可能如下所示:

NavigationView {
.....
                  ZStack{
                        Image("background")
                            .resizable()
                            .scaledToFill()
                            .frame(minWidth: 0, maxWidth: .infinity)
                            .edgesIgnoringSafeArea(.all)
                        
                        NavigationLink(
                            destination: LoginsignupView().navigationBarBackButtonHidden(true)
                                .navigationBarHidden(true), isActive:$showingLogout)
                        {
                            
                            Text("logout").foregroundColor(.white)
                                .fontWeight(.bold)
                                .padding(.vertical)
                                .frame(width: UIScreen.main.bounds.width - 100)
                                .background(
                                    
                                    LinearGradient(gradient: .init(colors: [Color("Color"),Color("Color1"),Color("Color2")]), startPoint: .leading, endPoint: .trailing)
                                )
                        }
                    }
                    .tag(2)
                    .onAppear(perform: {
                             httpClient.Logout()
                             showingLogout = true
                    })
                    .navigationBarBackButtonHidden(true)
                    .navigationBarHidden(true)
}