当前位置: 首页 > 面试题库 >

如何在SwiftUI的一个视图上显示两个警报?

郗福
2023-03-14
问题内容

我想将两个唯一的警报附加到同一Button视图。当我使用下面的代码时,只有底部的警报起作用。

我正在macOS Catalina上使用Xcode 11的正式版本。

@State private var showFirstAlert = false
@State private var showSecondAlert = false

Button(action: {
    if Bool.random() {
        showFirstAlert = true
    } else {
        showSecondAlert = true
    }
}) {
    Text("Show random alert")
}
.alert(isPresented: $showFirstAlert) {
    // This alert never shows
    Alert(title: Text("First Alert"), message: Text("This is the first alert"))
}
.alert(isPresented: $showSecondAlert) {
    // This alert does show
    Alert(title: Text("Second Alert"), message: Text("This is the second alert"))
}

我希望在设置showFirstAlert为true
时显示第一个警报,而在我设置为true时希望显示第二个警报showSecondAlert。只有第二个警报显示其状态为true时,但第一个警报不执行任何操作。


问题答案:

第二个调用.alert(isPresented)覆盖了第一个。您真正想要的是Binding<Bool>指示是否显示警报,以及应该从闭包后面返回警报的某种设置.alert(isPresented)。您可以为此使用Bool,但是我继续使用枚举来完成此操作,因为它扩展为两个以上的警报。

enum ActiveAlert {
    case first, second
}

struct ToggleView: View {
    @State private var showAlert = false
    @State private var activeAlert: ActiveAlert = .first

    var body: some View {

        Button(action: {
            if Bool.random() {
                self.activeAlert = .first
            } else {
                self.activeAlert = .second
            }
            self.showAlert = true
        }) {
            Text("Show random alert")
        }
        .alert(isPresented: $showAlert) {
            switch activeAlert {
            case .first:
                return Alert(title: Text("First Alert"), message: Text("This is the first alert"))
            case .second:
                return Alert(title: Text("Second Alert"), message: Text("This is the second alert"))
            }
        }
    }
}


 类似资料:
  • 问题内容: 我正在尝试使用Apple的 SwiftUI 制作一个应用程序,我需要有两个按钮在同一行中显示两个不同的视图。 我使用 Xcode beta 7 和 MacOS Catalina beta 7 。我尝试添加一个表示视图的视图,但是无法单击它,而当我尝试在外部进行简单单击并单击该视图时,该视图没有出现。我也尝试过添加一个内部,但是它也不起作用。单击时也无法添加,视图仍然不会出现 我希望该视

  • 问题内容: 我需要帮助在游戏场景中呈现警报视图。我目前正在努力做到这一点,例如GameScene.Swift不是标准的ViewController。如果有帮助,我需要这样做,因为我需要用户输入一个值,该值用作游戏中球Sprite Kit节点的坐标。输入只是一个标准整数,因此这不是问题。也欢迎通过警报视图实现此操作的其他任何想法。 那是在GameViewController文件中 谢谢 问题答案:

  • 我有一个ApplicationInfo类型的列表和另一个String类型的ArrayList。我想在listView中列出这两者。我可以将ArrayAdapter(ApplicationInfo)和Array适配器(String)扩展到ApplicationAdapter吗。班这是我当前的代码,只显示ApplicationInfo。 ApplicationAdapter.class 所有应用程序活

  • 我正在使用Material-用户界面-Next,并试图以一种非常特殊的方式创建图像。 我有一些相当奇怪的问题。 1-3出现在1下面 2-2和3不会填满它们的整个空间(当突出显示时,无论图像如何,只有一半的内容空间被利用) 3-有时我会得到类似以下的东西: 为了便于参考,如果您遵循此链接,那么您将转到物料ui下一个GridList文档。在高级网格列表下,您将看到一个大图像和许多小图像。我的目标是将其

  • 我正在编写一个掷骰子的程序。我对java还很陌生,因为我正在上课。我在这个程序的不同包中使用了多个类,我想弄清楚的是,在一个类中,对于我的包对OfDice,我在一个类中创建了对象对OfDice,die1和die2。现在我有了另一个包rollDice,我的目标是使用对OfDice类滚动两个骰子并显示滚动。我正在纠结的是如何准确地做到这一点。当我滚动骰子时,我的结果显示,就好像我只滚动了一个骰子一样。

  • 在以前版本的swift中,您可以在ViewController中创建AVCaptureVideoPreviewLayer,并使用view将其添加到默认视图中。层添加子层(预览层)。 在SwiftUI ContentView中如何实现这一点?SwiftUI中的所有视图类型似乎都没有addSublayer。没有文本(“你好,世界”)。层添加子层。。。。 我尝试添加previewLayer到Conten