Я использую NavigationLink для навигации между представлениями, и он не работает в одном представлении в SwiftUI - PullRequest
3 голосов
/ 19 марта 2020

Когда я хочу выйти из своего приложения, я хочу показать начальный вид, который имеет страницу «войти» / «создать учетную запись», используя 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()
    }
}

Заранее спасибо!

1 Ответ

1 голос
/ 19 марта 2020

NavigationLink работает только в NavigationView, поэтому оно должно быть где-то вроде

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

Примечание: contentViewVerify изменение отсутствует в представленном коде, убедитесь, что оно действительно установлен на false.

...