【问题标题】:How to determine pressed modifier keys when a Cocoa app is started?启动 Cocoa 应用程序时如何确定按下的修饰键?
【发布时间】:2015-07-23 17:36:29
【问题描述】:

在我正在开发的应用程序中,数据库用于存储所有用户数据,通常位于库/应用程序支持中的某个位置。为了使用户能够切换数据库,我想实现一个类似于 iTunes 或 iPhoto 的功能,如果在启动应用程序时按下选项键,应用程序会询问库或数据库的位置。

如果手边没有 NSEvent,我如何检查当前按下的(修饰符)键?

我已经试过了:

[NSResponder flagsChanged:(NSEvent *)theEvent] – 可能没有被调用,因为选项键在窗口之前已经按下并且任何响应者都被实例化了。

[[NSApplication sharedApplication] currentEvent] – 返回nil

【问题讨论】:

    标签: macos cocoa nsevent


    【解决方案1】:

    把这个放到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 
    }
    

    【讨论】:

      【解决方案2】:

      Swift 5 变体:

      func applicationDidFinishLaunch(_ aNotification: Notification?) {
      
          if NSEvent.modifierFlags.intersection(.deviceIndependentFlagsMask) == .option {
              // Your code
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2014-04-23
        • 2011-08-01
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        相关资源
        最近更新 更多