如何将NSEvent标记为已处理?

时间:2018-01-07 08:22:58

标签: swift xcode macos cocoa

我按下以下代码处理按键盘上的字母键。

NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { event in
    // code
}

如何将NSEvent标记为已处理,不允许系统和其他应用再次处理它?例如,不允许在打开的文本编辑器中输入按下的字母?

1 个答案:

答案 0 :(得分:3)

NSEvent无法做到这一点。正如文档所述:

  

事件以异步方式发送到您的应用程序,您只能观察事件;您无法修改或以其他方式阻止将事件传递到其原始目标应用程序。

您不属于事件生成系统;你只是收到通知作为你的runloop的一部分。

如果您想成为活动系统的一部分,请在应用层下方使用CGEvent。见tapCreate(tap:place:options:eventsOfInterest:callback:userInfo:)。回调可以返回NULL以表明它已经消耗了该事件。