如何在 SwiftUI 中使用带条件检查的按钮进行导航

din*_*rma 3 navigation swiftui swiftui-navigationlink

由于NavigationButton不再可用,我如何检查NavigationLink中的条件以便导航到另一个视图?

NavigationLink(destination: Dashboard(userName: self.userId,
                                      password: self.password), isActive: $showDashboard) {
    Button(action: {
        if self.userId.isEmpty || self.password.isEmpty {
            self.isAlert = true
        } else {
            self.showDashboard = true
        }
                       
    }) {
        Text("Submit")
            .foregroundColor(.white)
            .font(.system(size: 22))
                       
        Dashboard()
    }
    .frame(minWidth: 150, idealWidth: 300, maxWidth: 450,
           minHeight: 30, idealHeight: 40, maxHeight: 50, alignment: .center)
    .background(Color(red: 81/255, green: 221/255, blue: 182/255))
                       
    .padding([.leading, .trailing], 20)
}
Run Code Online (Sandbox Code Playgroud)

编辑:-

另外,如果用户名密码的长度超过 16,我想显示警报;如果长度超过 10,则显示不同的警报;如果长度为 0,则显示空消息警报。

39f*_*edy 5

你可以这样做:

    NavigationView {
        VStack {
            NavigationLink(destination:  Dashboard(userName: self.userId, password: self.password), isActive: $showDashboard) {
                Text("")
            }
            Button(action: {
                 if self.userId.isEmpty || self.password.isEmpty {
                      self.isAlert = true
                  } else {
                      self.showDashboard = true
                  }
            }) {
                Text("Submit")
                    .foregroundColor(.green)
                    .font(.system(size: 22))

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

要记住的一件事是,NavigationLink 本身就是一个按钮,当按下它时,它会导航到destinationView,该isActive参数是强制发生这种情况的一种方法(无需用户单击 NavigationLink)。截至目前,我不确定如何将逻辑嵌入到 NavigationLinks 中。

希望这可以帮助 :)

编辑:

您可以做的另一件事如下:

NavigationLink(destination:Dashboard(userName: self.userId, password: self.password)) {
                    Text("Submit")
                }.disabled(self.userId.isEmpty || self.password.isEmpty )
Run Code Online (Sandbox Code Playgroud)

这将禁用 NavigationLink,直到两个输入字段都不为空。