Mac Catalyst SwiftUI:显示重复按钮的警报

Mac Catalyst SwiftUI: Alert showing duplicate buttons

有谁知道如何修复这个错误?否则我会创建自己的警报模式吗?这似乎是一个老错误 - 至少从 macOS 10.15.3 开始,现在是 10.15.5,但仍未解决。有趣的是,在按下查看后的最初几毫秒内,它正确呈现 - 仅显示 2 个按钮,然后它就中断了。 Alert with multiple buttons

fileprivate func foo() -> Alert {
        return Alert(title: Text("Foo"),
                     message: Text("Are you sure you want to ..."),
                     primaryButton: .default(Text("Yes"), action: {
                        self.fooAction()
                     }), secondaryButton: .default(Text("No")))
    }

并调用:

.alert(isPresented: $isShowingFoo, content:{
            foo()
        })

我记得以前遇到过同样的问题,但现在它显示了预期的按钮。我正在为 mac 催化剂应用程序使用 Xcode 11.5,目标是 ios 13.5 和 mac 10.15。请注意,这不是 macos 应用。

我有以下显示预期按钮的测试。但是我注意到,如果我多次点击一个按钮,应用程序会在一段时间后崩溃。

struct ContentView: View {

@State var isShowingFoo = false

var body: some View {
VStack  {
    Button(action: {
        self.isShowingFoo.toggle()
    }) {
        Text("Press to show alert")
    }
}.alert(isPresented: $isShowingFoo) {
    foo()
}
}

fileprivate func foo() -> Alert {
return Alert(title: Text("Foo"),
             message: Text("Are you sure you want to ..."),
             primaryButton: .default(Text("Yes"), action: {
                self.fooAction()
             }), secondaryButton: .default(Text("No")))
}

func fooAction() {
print("---> Yes fooAction")
}
}

我也试过

secondaryButton: .default(Text("no"), action: {})
.alert(isPresented: $jsonData.didFail, content: {
          Alert(title: Text("Network Error"),
                message: Text(jsonData.errorMessage),
                dismissButton: .default (Text("OK")))
      })

将该代码放在 HStack 或 VStack 等容器的结束块中。 didFail 变量必须是 STATE 变量或 BINDING。请记住,当您将其挂接到警报时,警报视图将切换它。因此,除了显示警报外,不要在您的逻辑中的任何其他地方使用它。

使用上面的代码,我仍然从 MacOS 10.15.6 上的 NavigationView 中获取重复的按钮,但它按预期在 iPhone 和 iPadOS 上工作。