【问题标题】:I am using NavigationLink to navigate between views and it doesn't work in a single view in SwiftUI我正在使用 NavigationLink 在视图之间导航,但它在 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 中还是不行。

标签: ios swift swiftui navigationlink


【解决方案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”时,您指的是根视图?
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多