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

时间:2020-06-07 19:03:24

标签: swift macos swiftui alert catalyst

有人知道如何解决此错误吗?否则,我可能会创建自己的警报模式?看来这是一个老错误-至少是从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()
        })

2 个答案:

答案 0 :(得分:0)

我记得过去也有同样的问题,但是现在它显示了预期的按钮。我将Xcode 11.5用于mac催化剂应用,目标是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: {})

答案 1 :(得分:0)

.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上运行。