如何确保新的视图控制器对用户可见?
How to make sure that a new view controller is visible to the user?
首先,原生macOS应用程序在启动后3秒被制作成附件类型应用程序(首先显示信息屏幕,然后应用程序进入系统菜单栏):
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
NSApplication.shared.setActivationPolicy(.accessory)
}
它有一个状态栏菜单:
class func createMenu(color: Bool) -> Void {
let statusBar = NSStatusBar.system
self.sharedInstance.storedStatusItem = statusBar.statusItem(withLength: NSStatusItem.variableLength)
self.sharedInstance.storedStatusItem.menu = ABCMenu.statusBarMenu()
}
用户在状态栏菜单中有几个选项可以打开带有控件的不同屏幕。其中一个显示为:
class func showServiceViewController() -> Void {
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: Bundle.main)
guard let vc = storyboard.instantiateController(withIdentifier: "ABCServiceViewController") as? ABCServiceViewController, let checkedWindow = ABCUIManager.sharedInstance.window else {
return
}
checkedWindow.contentViewController = vc
checkedWindow.setIsVisible(true)
checkedWindow.orderFrontRegardless()
}
问题是有时选定的视图控制器不会进入后台,必须在许多其他已打开的应用程序和 windows 下方找到。大多数时候它工作正常,但并非总是如此。
有没有更好的方法来确保新的视图控制器始终显示在最高级别并显示给用户?
感谢您的任何建议。
我会在显示之前激活应用程序 window(因为您有附件应用程序,所以默认情况下不会激活,必须以编程方式完成)
...
NSApplication.shared.activate(ignoringOtherApps: true)
checkedWindow.contentViewController = vc
checkedWindow.setIsVisible(true)
checkedWindow.orderFrontRegardless()
}
首先,原生macOS应用程序在启动后3秒被制作成附件类型应用程序(首先显示信息屏幕,然后应用程序进入系统菜单栏):
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
NSApplication.shared.setActivationPolicy(.accessory)
}
它有一个状态栏菜单:
class func createMenu(color: Bool) -> Void {
let statusBar = NSStatusBar.system
self.sharedInstance.storedStatusItem = statusBar.statusItem(withLength: NSStatusItem.variableLength)
self.sharedInstance.storedStatusItem.menu = ABCMenu.statusBarMenu()
}
用户在状态栏菜单中有几个选项可以打开带有控件的不同屏幕。其中一个显示为:
class func showServiceViewController() -> Void {
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: Bundle.main)
guard let vc = storyboard.instantiateController(withIdentifier: "ABCServiceViewController") as? ABCServiceViewController, let checkedWindow = ABCUIManager.sharedInstance.window else {
return
}
checkedWindow.contentViewController = vc
checkedWindow.setIsVisible(true)
checkedWindow.orderFrontRegardless()
}
问题是有时选定的视图控制器不会进入后台,必须在许多其他已打开的应用程序和 windows 下方找到。大多数时候它工作正常,但并非总是如此。
有没有更好的方法来确保新的视图控制器始终显示在最高级别并显示给用户?
感谢您的任何建议。
我会在显示之前激活应用程序 window(因为您有附件应用程序,所以默认情况下不会激活,必须以编程方式完成)
...
NSApplication.shared.activate(ignoringOtherApps: true)
checkedWindow.contentViewController = vc
checkedWindow.setIsVisible(true)
checkedWindow.orderFrontRegardless()
}