我继承 NSTextView 并覆盖 keyDown。我想检测命令键组合。例如,Command-L。
苹果的文档 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html表明您只是and修饰符标志(在传递的 NSEvent 中)带有 NSEventModifierFlags.CommandKeyMask。
当我这样做时:
let ck = NSEventModifierFlags.CommandKeyMask
我收到一个奇怪的错误:
Binary operator '&' cannot be applied to two 'NSEventModifierFlags' operands.
这是怎么回事?这是 swift 2.0,xcode 7。
Thanks!
Apple 的文档表明您只需and修饰符标志
该文档仍然引用 C 和 Objective-C。斯威夫特使用OptionSetType https://developer.apple.com/library/prerelease/mac/documentation/Swift/Reference/Swift_OptionSetType_Protocol/index.html,它不使用按位运算符来检查标志。
相反,使用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")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)