我有一个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!")))
}
}
}
}
}
}
}
1条答案
按热度按时间vcudknz31#
1-添加
2-如下定义
NavigationStack
3-添加此
enum