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 上工作。
有谁知道如何修复这个错误?否则我会创建自己的警报模式吗?这似乎是一个老错误 - 至少从 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 上工作。