如何以编程方式更改 NavigationLink 的行为? SwiftUI

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

如何才能使当我单击 NavigationLink 时,它首先检查布尔值并相应地继续?例如。

Navigationlink(go){
  goToAScreen ? Ascreen() : Bscreen()
}

现在 NavigationLink isActive 已被弃用,我找不到任何解决方法,我实际上想在特定布尔值为 true 时显示警报,否则我希望它转到 someScreen()

swiftui navigation swiftui-navigationlink
1个回答
0
投票

您可以实现您想要的目标(我假设这是用于登录页面):

struct ContentView: View {
    @State var isPasswordCorrect: Bool?
    
    @State var password = ""
    
    var body: some View {
        NavigationStack {
            VStack {
                TextField("Enter password", text: $password)
                    .textFieldStyle(.roundedBorder)
                
                Button("Log in") {
                    if password == "1234" {
                        isPasswordCorrect = true
                    } else {
                        isPasswordCorrect = false
                    }
                }
            }
            .navigationDestination(isPresented: .constant(isPasswordCorrect == true)) {
                Text("Profile")
            }
        }
        .alert("Incorrect password", isPresented: .constant(isPasswordCorrect == false)) {
            Button("Ok", role: .cancel) { }
        }
    }
}

我已经有一段时间没有使用 SwiftUI了,所以我不记得像这样使用

.constant(_:)
是否是一个好主意。如果您不喜欢这种方法,我建议您查看 this 以获得将表达式转换为布尔绑定的更好方法。

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