Swift - 如何使 window 无法激活?
Swift - how to make window unactivable?
我想让应用程序无法激活。
我的意思是它必须处于非活动状态且非前景,即使单击它也是如此。活动 window 必须与点击我的应用之前的应用相同。
我该怎么做?
更新:
- 让我们想象一些 window/panel。像一个码头。我们称它为 "Docky"
Docky 处于非活动状态,活动 window 是 Safari:
NSRunningApplicationSafari.isActive == true
NSRunningApplicationDocky.isActive == false
我正在点击 Docky 的任何空白点。
预期结果:
Safari 仍然有效window。喜欢之前点击:
NSRunningApplicationSafari.isActive == true
NSRunningApplicationDocky.isActive == false
实际结果:
Docky 处于活动状态 window,Safari 处于非活动状态:
NSRunningApplicationSafari.isActive == false
NSRunningApplicationDocky.isActive == true
另一个示例是键盘查看器。您正在单击虚拟键盘,但活动 window 是另一个应用程序。 Ant 完全活跃 window 正在获取 keyPress 事件。
实际上您只需要 .nonactivatingPanel
样式面板。其他一切都是细节,比如 window 的级别、覆盖 acceptsFirstMouse:
、needsPanelToBecomeKey
的自定义视图等。顺便说一句,按钮默认接受第一次点击,在这种情况下不激活应用程序。
例如,您的 AppDelegate
可能如下所示:
class AppDelegate: NSObject, NSApplicationDelegate {
var docky: NSPanel!
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the window and set the content view.
docky = NSPanel(
contentRect: NSRect(x: 0, y: 0, width: 120, height: 600),
styleMask: [.nonactivatingPanel],
backing: .buffered, defer: false)
docky.level = .mainMenu
....
docky.orderFrontRegardless()
}
我想让应用程序无法激活。
我的意思是它必须处于非活动状态且非前景,即使单击它也是如此。活动 window 必须与点击我的应用之前的应用相同。
我该怎么做?
更新:
- 让我们想象一些 window/panel。像一个码头。我们称它为 "Docky"
Docky 处于非活动状态,活动 window 是 Safari:
NSRunningApplicationSafari.isActive == true NSRunningApplicationDocky.isActive == false
我正在点击 Docky 的任何空白点。
预期结果:
Safari 仍然有效window。喜欢之前点击:
NSRunningApplicationSafari.isActive == true NSRunningApplicationDocky.isActive == false
实际结果:
Docky 处于活动状态 window,Safari 处于非活动状态:
NSRunningApplicationSafari.isActive == false NSRunningApplicationDocky.isActive == true
另一个示例是键盘查看器。您正在单击虚拟键盘,但活动 window 是另一个应用程序。 Ant 完全活跃 window 正在获取 keyPress 事件。
实际上您只需要 .nonactivatingPanel
样式面板。其他一切都是细节,比如 window 的级别、覆盖 acceptsFirstMouse:
、needsPanelToBecomeKey
的自定义视图等。顺便说一句,按钮默认接受第一次点击,在这种情况下不激活应用程序。
例如,您的 AppDelegate
可能如下所示:
class AppDelegate: NSObject, NSApplicationDelegate {
var docky: NSPanel!
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the window and set the content view.
docky = NSPanel(
contentRect: NSRect(x: 0, y: 0, width: 120, height: 600),
styleMask: [.nonactivatingPanel],
backing: .buffered, defer: false)
docky.level = .mainMenu
....
docky.orderFrontRegardless()
}