我正在使用 NavigationLink 在视图之间导航,但它在 SwiftUI 的单个视图中不起作用

Posted

技术标签:

【中文标题】我正在使用 NavigationLink 在视图之间导航,但它在 SwiftUI 的单个视图中不起作用【英文标题】:I am using NavigationLink to navigate between views and it doesn't work in a single view in SwiftUI 【发布时间】:2020-03-19 17:14:44 【问题描述】:

当我想退出我的应用程序时,我想使用 NavigationLink 显示具有“登录”/“创建帐户”页面的初始视图。我在应用程序的其他地方使用了完全相同的方法,它在那里工作,但在这里它没有。这是我的代码:

import SwiftUI

var signOut = false

struct SignOut: View 

    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    @State private var curent: Int? = nil

    var body: some View 
        VStack 
            NavigationLink(destination: ContentView(), tag: 1, selection: $curent) 
                EmptyView()
            .buttonStyle(PlainButtonStyle())

            Button(action: 
                let defaults = UserDefaults.standard
                defaults.set(false, forKey: "isLoggedIn")
                defaults.set("", forKey: "token")

                if contentViewVerify
                
                    print("content true")
                    self.presentationMode.wrappedValue.dismiss()
                
                else if contentViewVerify == false
                
                    print("content false")
                    self.curent = 1 // if contentViewVerify is false I want to use the NavigationLink method which activates once curent = 1
                

            ) 
                Text("SignOut")
            .navigationBarTitle("covid")
            .navigationBarBackButtonHidden(true)
            .onAppear(perform: 
                signOut = true
            )
        
    


struct SignOut_Previews: PreviewProvider 
    static var previews: some View 
        SignOut()
    

提前谢谢你!

【问题讨论】:

您的SignOut 视图是否在NavigationView 堆栈中? 现在不行了,但是我试着把它放在 NavigationView 中还是不行。 【参考方案1】:

NavigationLinkNavigationView 中工作,所以它应该是这样的

struct SignOut_Previews: PreviewProvider 
    static var previews: some View 
       NavigationView        // for testing in preview
           SignOut()
       
    

注意:contentViewVerify 更改在呈现的代码中不存在,请确保它确实设置为 false

【讨论】:

我试图这样做,但它不起作用。或者也许我没有把它放在正确的地方。你能帮我把它从上面放到我的代码中吗? contentViewVerify 设置为 false。当我按下按钮时,“content false”出现在我的 concole 中,这意味着它进入了“else”语句,所以它是错误的,因为我有那个 print(“content false”) 而我在其他任何地方都没有那个在我的代码中。 我尝试在预览中对其进行测试,但由于某种原因预览无法正常工作,但是当我在模拟器上运行它时,它运行正常,但 NavigationLink 问题仍然存在。 PreviewProvider 在模拟器上不工作,它只用于预览,所以对于模拟器,对于真实设备,您必须以相同的方式放置在 root NavigationView 中的某个位置。 当您说“in root”时,您指的是根视图?

以上是关于我正在使用 NavigationLink 在视图之间导航,但它在 SwiftUI 的单个视图中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:NavigationLink 奇怪的行为

SwiftUI NavigationLink 如何到达另一个 SwiftUI 页面?

需要帮助使 NavigationLink 在 SwiftUI 中工作

从模态视图使用 NavigationLink 的 SwiftUI 推送视图

如何处理 UIViewControllerRepresentable 包装器中的 NavigationLink?

NavigationLink 标记和选择未按预期工作