我继承了NSTextView并重写了keyDown。我想检测命令键组合。例如,Command-L。
Apple's documentation表示你只是和修饰符标志(在传递的NSEvent中)和NSEventModifierFlags.CommandKeyMask。
当我这样做时:
let ck = NSEventModifierFlags.CommandKeyMask
我收到一个奇怪的错误:
Binary operator '&' cannot be applied to two 'NSEventModifierFlags' operands.
这笔交易是什么?这是swift 2.0,xcode 7。
谢谢!
答案 0 :(得分:11)
Apple的文档表明您只需和修饰符标记
文档仍然指C和Objective-C。 Swift使用OptionSetType
,它不使用按位运算符来检查标志。
相反,使用contains()
方法检查一个或多个标志:
if theEvent.modifierFlags.contains(.CommandKeyMask) {
NSLog("command key down")
}
if theEvent.modifierFlags.contains(.AlternateKeyMask) {
NSLog("option key down")
}
if theEvent.modifierFlags.contains([.CommandKeyMask, .AlternateKeyMask]) {
NSLog("command and option keys down")
}
要检查单个密钥,请使用intersect
过滤掉任何不需要的标记,然后使用==
检查单个标记:
let modifierkeys = theEvent.modifierFlags.intersect(.DeviceIndependentModifierFlagsMask)
if modifierkeys == .CommandKeyMask {
NSLog("Only command key down")
}
答案 1 :(得分:2)
NSEventModifierFlags是Swift 2.0中的optionSet。您可以使用contains方法检查它是否包含命令修饰键
override func keyDown(theEvent:NSEvent) {
if theEvent.characters == "l" && theEvent.modifierFlags.contains(.CommandKeyMask) {
print("command-L pressed")
}
}
答案 2 :(得分:1)
我本来要发表评论,但没能。
万一有人(像我一样)将来遇到这篇文章,自2015年以来Swift发生了一些变化。
快捷键4:
theEvent.modifierFlags.contains(.command)
theEvent.modifierFlags.contains(.option)
theEvent.modifierFlags.contains([。command,.option]) NSLog(“按下命令和选项键”)
也; (.control)用于CTRL。
这是我的特殊代码:
override func viewDidLoad()
{
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown, handler: myKeyDownEvent)
}
func myKeyDownEvent(event: NSEvent) -> NSEvent {
if (event.keyCode == 121) && event.modifierFlags.contains([.command, .option]) {
//Do what you want when PGDN + cmd + alt is pressed
}
return event
}