如何解决按 NSMenuItem 时打开并将新窗口置于最前面
我有一个作为代理 (lsuielement) 运行的 macOS 菜单应用程序。
我需要它有一个配套的设置窗口。 NSMenu中有一个“设置”NSMenuItem,要求是打开一个实际的窗口,按下时将它带到最前面。
窗口是 SwiftUI 驱动的。这是它的工作原理:
response.data?.let { brastlewarkTown ->
hereIwantTheObject = brastlewarkTown
Log.i(TAG,"onCreateView: ${hereIwantTheObject!!.name}")
}
// 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)
}
}
试图实现这一点,但没有奏效。
任何帮助都会很棒。非常感谢。
解决方法
最后想通了。我需要这 3 个。激活策略应该得到更好的管理,但它的价值在这里是有效的。
NSApp.setActivationPolicy(.regular)
NSApp.activate(ignoringOtherApps: true)
settingsWindow!.window?.orderFrontRegardless()
在上下文中
@objc func openSettings() {
if(settingsWindow == nil) {
let detailView = ActionWindow();
settingsWindow = DetailWindowController(rootView: detailView)
settingsWindow!.window?.title = "Cloud Brains - Settings";
settingsWindow!.showWindow(nil)
}
NSApp.setActivationPolicy(.regular)
NSApp.activate(ignoringOtherApps: true)
settingsWindow!.window?.orderFrontRegardless()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。