У меня есть приложение меню macOS, которое работает как агент (LSUIElement).
Мне нужно, чтобы у него было окно настроек компаньона. В NSMenu есть настройки NSMenuItem, и требуется открыть фактическое окно и вывести его на передний план при нажатии.
Окно управляется SwiftUI. Вот как это работает:
// main is an NSMenu
main.addItem(
withTitle: "Settings",
action: #selector(AppDelegate.openSettings),
keyEquivalent: "")
@objc func openSettings() {
let detailView = SettingsWindow(); // Swift UI view
let controller = DetailWindowController(rootView: detailView) // See below
controller.window?.title = "Settings";
controller.showWindow(nil)
NSApp.activate(ignoringOtherApps: true)
}
class DetailWindowController<RootView : View>: NSWindowController {
convenience init(rootView: RootView) {
let hostingController = NSHostingController(rootView: rootView.frame(width: 400, height: 500))
let window = NSWindow(contentViewController: hostingController)
window.setContentSize(NSSize(width: 400, height: 500))
self.init(window: window)
}
}
Что на самом деле происходит
Текущее поведение заключается в том, что окно открывается, однако оно всегда позади любых других окон, находящихся в данный момент на переднем плане.
Мне нужно, чтобы он был на переднем плане.
NSApp.activate(ignoringOtherApps: true)
в приведенном выше коде — это попытка добиться этого, но это не сработало.
Любая помощь была бы потрясающей. Большое спасибо.