SwiftUI:为什么没有显示第二个警报?

时间:2021-02-18 15:42:26

标签: swiftui alert

在下面的简单示例中,为什么警报 2 没有出现?

struct ContentView: View {
    
    @State private var showingOtherButton = false
    @State private var showingAlert1 = false
    @State private var showingAlert2 = false
    
    var body: some View {
        Group {
            if showingOtherButton {
                Button("Show Alert 2") {
                    showingAlert2 = true
                }
                .alert(isPresented: $showingAlert2) {
                    print("Alert 2 should be shown")
                    return Alert(title: Text("Alert 2"), dismissButton: .default(Text("Ok")))
                }
            } else {
                Button("Show other Button") {
                    self.showingOtherButton = true
                }
                
                Button("Show Alert 1") {
                    showingAlert1 = true
                }
            }
        }
        .alert(isPresented: $showingAlert1) {
            Alert(title: Text("Alert 1"), dismissButton: .default(Text("OK")))
        }
    }
}

将警报 1 修饰符直接放在“显示警报 1”按钮上就可以了,但我不明白为什么。

1 个答案:

答案 0 :(得分:1)

您的第二个警报应该与第一个警报位于同一位置 - 附加到 Group 视图,而不是 Button

Group {
    if showingOtherButton {
        Button("Show Alert 2") {
            showingAlert2 = true
        }
    } else {
        Button("Show other Button") {
            self.showingOtherButton = true
        }
        
        Button("Show Alert 1") {
            showingAlert1 = true
        }
    }
}
.alert(isPresented: $showingAlert1) {
    Alert(title: Text("Alert 1"), dismissButton: .default(Text("OK")))
}
.alert(isPresented: $showingAlert2) {
    print("Alert 2 should be shown")
    return Alert(title: Text("Alert 2"), dismissButton: .default(Text("Ok")))
}
相关问题