如何在 Swift 中通过单击按钮从一个导航视图导航到另一个导航视图

问题描述 投票:0回答:1

我正在尝试通过单击按钮从一个导航视图导航到另一个导航视图。流程应该是内容视图 -> 登录视图 -> 密码视图。我通过附加到导航路径成功从内容导航到登录,但是当我尝试在登录视图中执行相同操作以转到密码时,它不起作用。这是在视图之间导航的正确方法吗?我不确定为什么以下内容不适用于“登录”->“密码”。

   ... Content View
   @State private var path = NavigationPath()
    var body: some View {
        NavigationStack(path: $path) {
            ZStack {                    
                ...some view
                Button(action: {path.append("LoginView")}) {
                                Image(systemName: "arrow.right")
                                    .frame(width:30, height: 30)
                                    .background(.white.opacity(0.5))
                                    .foregroundColor(.white)
                                    .clipShape(Circle()).padding(.top, 580)
                            }.navigationDestination(for: String.self) { view in
                                if view == "LoginView" {
                                    LoginView()
                                }
                                else {
                                    PasswordView()
                                }
                            }
            }
        }
    }

// login page
struct LoginView: View {
    @State private var username: String = ""
    @State private var path = NavigationPath()
    
    var body: some View {
            NavigationView {
              NavigationStack {
                ZStack {
                    VStack {
                        Button(action: {path.append("PasswordView")}) {
                            Text("Continue")
                                .padding(.horizontal, 125)
                                .padding(.vertical, 10)
                                .font(.system(size: 16, weight: .medium))
                                .foregroundColor(Color("DarkGreen"))
                                .background(Color("PrimaryGreen"))
                                .cornerRadius(25)
                        }.navigationDestination(for: String.self) { view in
                                if view == "PasswordView" {
                                    PasswordView()
                                }
                            }
                    }
               }
            }
          }
    }


// password page
struct PasswordView: View {
    @State private var password: String = ""
    var body: some View {
        NavigationView {
            ZStack {
               ...password view
            }
        }
    }
    
}


ios swift swiftui navigation uinavigationcontroller
1个回答
0
投票

查看 LoginView 中的代码,您忘记在 NavigationStack 中添加路径,因此它没有执行目标代码

更改代码

NavigationStack { ...} 

NavigationStack(path: $path) {
... Your code
}

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.