ios 按按钮单击条件导航

pokxtpni  于 2023-05-19  发布在  iOS
关注(0)|答案(1)|浏览(153)

我有一个SwiftUI按钮,它应该检查某个条件(isSmiling)--如果这个布尔值为真--它应该导航到NavigationStack上的一个新视图--否则它应该显示一个警报。下面,我有一个NavigationLink和一个Button --但我真的只想让按钮在按下时以编程方式导航到一个新视图,并且isSmiling设置为true。我不想显示NavigationLink。我如何才能做到这一点?

struct ControlView: View {
  @Binding var isSmiling: Bool
    
  @State private var showingAlert = false

  var body: some View {
    VStack {
        Spacer()
        NavigationStack {
            VStack(alignment: .leading) {
                Text("Please smile !!! Click button to continue").bold().font(.title3).padding(.bottom).background(.white)
                HStack(spacing: 12) {
                    
                    NavigationLink {
                        WelcomeView()
                    } label: {
                        ZStack {
                            RoundedRectangle(cornerRadius: 10)
                                .foregroundColor(.blue)
                            Text("Validate").font(.title3)
                                .foregroundColor(.white)
                        }
                    }.frame(width: 100, height: 50).padding(.top, 10)
                    
                    Button("Validate") {
                        print("isSmiling = \(isSmiling)")
                        if !isSmiling {
                            showingAlert = true
                        }
                        
                    }.buttonStyle(.borderedProminent)
                        .tint(.blue)
                        .controlSize(.large)
                        .alert(isPresented: $showingAlert) {
                            Alert(title: Text("Livliness detection failed"),
                                  message: Text("Please smile!"),
                                  dismissButton: .default(Text("Got it!")))
                        }
                }
            }
        }
    }
  }
}
vcudknz3

vcudknz31#

1-添加

@Published var path: NavigationPath = .init()

2-如下定义NavigationStack

NavigationStack(path: $path) {

          ....
                    Button("Validate") {
                        print("isSmiling = \(isSmiling)")
                        if isSmiling {
                             path.append(.destinationPage)
                        }
                        else {
                            showingAlert = true
                        }
                        
                    }
                   .navigationDestination(for: Destination.self) { value in
                     WelcomeView()
                   }
          ....
}

3-添加此enum

enum Destination { 
    case destinationPage
}

相关问题