Cocoa 应用程序启动时如何确定按下的修改键?
How to determine pressed modifier keys when a Cocoa app is started?
在我正在开发的应用程序中,数据库用于存储所有用户数据,通常位于 Library/Application 支持中的某个位置。为了让用户能够切换数据库,我想实现一个类似于 iTunes 或 iPhoto 的功能,如果在启动应用程序时按下选项键,应用程序会询问库或数据库的位置。
如果手边没有 NSEvent,我如何检查当前按下的(修饰符)键?
我已经试过了:
[NSResponder flagsChanged:(NSEvent *)theEvent]
– 可能没有被调用,因为选项键在 window 之前已经关闭并且任何响应器都被实例化。
[[NSApplication sharedApplication] currentEvent]
– Returns nil
.
将此放入 applicationDidFinishLaunching
:
NSUInteger modifiers = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask);
if (modifiers == NSAlternateKeyMask) {
// do your stuff here
}
从 macOS 10.12 开始,这应该是:
NSUInteger modifiers = ([NSEvent modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask);
if (modifiers == NSEventModifierFlagOption) {
// do your stuff here
}
Swift 5 个变体:
func applicationDidFinishLaunch(_ aNotification: Notification?) {
if NSEvent.modifierFlags.intersection(.deviceIndependentFlagsMask) == .option {
// Your code
}
}
在我正在开发的应用程序中,数据库用于存储所有用户数据,通常位于 Library/Application 支持中的某个位置。为了让用户能够切换数据库,我想实现一个类似于 iTunes 或 iPhoto 的功能,如果在启动应用程序时按下选项键,应用程序会询问库或数据库的位置。
如果手边没有 NSEvent,我如何检查当前按下的(修饰符)键?
我已经试过了:
[NSResponder flagsChanged:(NSEvent *)theEvent]
– 可能没有被调用,因为选项键在 window 之前已经关闭并且任何响应器都被实例化。
[[NSApplication sharedApplication] currentEvent]
– Returns nil
.
将此放入 applicationDidFinishLaunching
:
NSUInteger modifiers = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask);
if (modifiers == NSAlternateKeyMask) {
// do your stuff here
}
从 macOS 10.12 开始,这应该是:
NSUInteger modifiers = ([NSEvent modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask);
if (modifiers == NSEventModifierFlagOption) {
// do your stuff here
}
Swift 5 个变体:
func applicationDidFinishLaunch(_ aNotification: Notification?) {
if NSEvent.modifierFlags.intersection(.deviceIndependentFlagsMask) == .option {
// Your code
}
}