我正在制作适用于macOS的菜单栏应用程序。有时应用程序需要向用户展示一个窗口,而我目前正在使用它
var windowController : NSWindowController!
let mainStoryBoard = NSStoryboard(name: NSStoryboard.Name("StoryboardName"), bundle: nil)
windowController = mainStoryBoard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("WindowID")) as! NSWindowController
windowController.showWindow(self)
我也正在激活该应用程序,而忽略所有其他应用程序,并使用window键和main键。效果很好,但是我的问题是,一旦我离开窗口(例如通过打开任务控制或切换到其他空间)并返回窗口(通过关闭任务控制或返回初始空间),我的应用不再聚焦,我的窗户向后退,无论我背后的哪个应用现在都处于活动状态。
因此,如果我的应用程序窗口位于Safari窗口顶部,然后切换到另一个空间,然后返回,则我的应用程序现在“丢失”在Safari窗口后面,并且Safari处于活动状态。我尝试删除“仅背景应用程序” info.plist键,以便该应用程序具有停靠图标,并且问题仍然存在。我究竟做错了什么?以及如何使我的窗户像普通窗户一样运转?救命!谢谢。
答案 0 :(得分:0)
我无法复制您描述的行为。无论我离开窗户,我的窗户都会停下来。您是这样使窗口成为AppDelegate
的属性吗?
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate
{
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
var prefsWindow: NSWindow?
func showMyWindow() // called from menu item
{
if prefsWindow == nil
{
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
let controllerId = NSStoryboard.SceneIdentifier("myWindow")
guard let controller = storyboard.instantiateController(withIdentifier: controllerId) as? NSWindowController else { return }
guard let window = controller.window else { return }
window.delegate = self
window.center()
prefsWindow = window
}
prefsWindow?.makeKeyAndOrderFront(self)
NSApp.activate(ignoringOtherApps: true)
}
func windowWillClose(_ notification: Notification)
{
prefsWindow = nil
}
...