我正在SwiftUI中开发一个应用程序,它有一个主窗口,但也有一个MenuBarExtra
。在设置中,有一个选项可以从Dock隐藏主窗口(这是我的应用程序的一个功能,应用程序只能在菜单栏中运行)。
一旦窗口被关闭,我希望用户能够重新打开它。
我添加了以下代码:
@main
struct MyApp : App
{
@Environment(\.openWindow) private var openWindow
@AppStorage(SettingsKeys.showInMenuBar) var showInMenuBar = false
@StateObject var viewModel = MainViewModel()
var body: some Scene {
WindowGroup(id: "MainWindow") {
ContentView(viewModel: self.viewModel)
}
.windowToolbarStyle(.unified)
MenuBarExtra("ScannerMainItem", systemImage: "rectangle.stack", isInserted: $showInMenuBar) {
Button(LocalizedStringKey("OPEN_MAIN_WINDOW")) {
self.openWindow(id: "MainWindow")
}.keyboardShortcut("m")
Divider()
Button(LocalizedStringKey("QUIT")) {
NSApplication.shared.terminate(nil)
}.keyboardShortcut("q")
}
}
}
如果主窗口已经关闭,这可以正常工作。但是,如果主窗口仍然打开,另一个(新)示例将被打开。我如何在任何时候都只能打开一个ID为“Main”的窗口?
2条答案
按热度按时间wnavrhmk1#
我已经为同样的问题挣扎了几个小时,并想出了一个解决方案。可能有更好的方法来解决这个问题,但现在我很高兴我有一些工作。
..
tcomlyy62#
基于@o.hennig的回答,我稍微调整了一下代码:
只是一个变通办法,但我的窗口是唯一的窗口与工具栏。。