你如何从 macOS 上的 SwiftUI 按钮打开 2 个窗口组?
How do you open 2 windowgroups from SwiftUI button on macOS?
我有一个应用程序,我需要一个按钮打开两个 windows。在 App 结构中,我有两个 window 组设置
@main
struct myApp: App {
var body : some Scene {
WindowGroup() {
WelcomeView()
}
WindowGroup("FirstViewGroup") {
FirstView()
}
.handlesExternalEvents(matching: Set(arrayLiteral: "FirstViewGroup"))
WindowGroup("SecondViewGroup") {
SecondView()
}
.handlesExternalEvents(matching: Set(arrayLiteral: "SecondViewGroup"))
}
}
在 WelcomeView 中,我有以下按钮操作:
Button {
if let firstURL = URL(string: "myApp://FirstViewGroup"), let secondURL = URL(string: "myApp://SecondViewGroup") {
NSWorkspace.shared.open(firstURL)
NSWorkspace.shared.open(secondURL)
}
} label: {
Text("Open Windows")
}
当我注释掉按钮操作中的 NSWorkspace.shared.open 行之一时,相应的 window 打开。但是当我有两个连续的 NSWorkspace.shared.open 调用时,我只得到第一个。想法?我在 info.plist 中正确设置了 URL 类型(因为每个 window 在单独调用时都会成功打开)
尝试在下一个事件循环中打开第二个 URL,例如
Button {
if let firstURL = URL(string: "myApp://FirstViewGroup"), let secondURL = URL(string: "myApp://SecondViewGroup") {
NSWorkspace.shared.open(firstURL)
DispatchQueue.main.async {
NSWorkspace.shared.open(secondURL) // << here !!
}
}
} label: {
Text("Open Windows")
}
我有一个应用程序,我需要一个按钮打开两个 windows。在 App 结构中,我有两个 window 组设置
@main
struct myApp: App {
var body : some Scene {
WindowGroup() {
WelcomeView()
}
WindowGroup("FirstViewGroup") {
FirstView()
}
.handlesExternalEvents(matching: Set(arrayLiteral: "FirstViewGroup"))
WindowGroup("SecondViewGroup") {
SecondView()
}
.handlesExternalEvents(matching: Set(arrayLiteral: "SecondViewGroup"))
}
}
在 WelcomeView 中,我有以下按钮操作:
Button {
if let firstURL = URL(string: "myApp://FirstViewGroup"), let secondURL = URL(string: "myApp://SecondViewGroup") {
NSWorkspace.shared.open(firstURL)
NSWorkspace.shared.open(secondURL)
}
} label: {
Text("Open Windows")
}
当我注释掉按钮操作中的 NSWorkspace.shared.open 行之一时,相应的 window 打开。但是当我有两个连续的 NSWorkspace.shared.open 调用时,我只得到第一个。想法?我在 info.plist 中正确设置了 URL 类型(因为每个 window 在单独调用时都会成功打开)
尝试在下一个事件循环中打开第二个 URL,例如
Button {
if let firstURL = URL(string: "myApp://FirstViewGroup"), let secondURL = URL(string: "myApp://SecondViewGroup") {
NSWorkspace.shared.open(firstURL)
DispatchQueue.main.async {
NSWorkspace.shared.open(secondURL) // << here !!
}
}
} label: {
Text("Open Windows")
}