捕获 NSEvent 以添加修饰符问题
Posted
技术标签:
【中文标题】捕获 NSEvent 以添加修饰符问题【英文标题】:Capturing NSEvent to add modifier Issue 【发布时间】:2015-06-29 15:35:02 【问题描述】:我正在尝试以编程方式在可可应用程序中为我的用户按住选项键。
对于我的生活,我似乎无法抓住 NSEVENT 对其进行修改并重新发布。我仍然想捕获 MouseDown 事件,因为我使用了该位置 - 我一直在尝试抓取该事件并将修饰符标志添加到它,但它似乎不起作用。对此的任何帮助将不胜感激。
这就是我所做的:
- (void)mouseDown:(NSEvent *)theEvent
[super mouseDown:theEvent];
if(!(theEvent.modifierFlags == NSAlternateKeyMask))
NSEvent *newEvent = [NSEvent keyEventWithType:
theEvent.type
location:theEvent.locationInWindow
modifierFlags:NSAlternateKeyMask
timestamp:theEvent.timestamp
windowNumber:theEvent.windowNumber
context:theEvent.context
characters:@""
charactersIgnoringModifiers:@""
isARepeat:YES
keyCode:0];
[super mouseDown:newEvent];
我也尝试过使用 CGPostEvent 的变体——但它似乎也从来没有工作过。显然只发布修饰符标志比看起来要困难。
谢谢
【问题讨论】:
按住选项键的目的是什么,即,其他代码的行为会有所不同,它将如何检测选项键的状态?如果其他代码使用CGEventSourceFlagsState
来检查修饰键状态,我不认为与NSEvent
s 混淆会愚弄它。 (顺便说一句,isARepeat:YES
看起来不对。)
im尝试模拟内置于pdfkit中的选择功能 - 选择选项但不具有用户保持选项。 span>
为了清楚起见,我对其进行了编辑 - 删除了 cgeventsourceflagsstate
【参考方案1】:
我用这段代码解决了-
- (void)mouseDown:(NSEvent *)theEvent
if(!(theEvent.modifierFlags == NSAlternateKeyMask))
[super mouseDown:[self createNewEvent:theEvent]];
else
[super mouseDown:theEvent];
- (NSEvent *)createNewEvent:(NSEvent *)theEvent
NSEvent *newEvent = [NSEvent
keyEventWithType:NSKeyDown
location:theEvent.locationInWindow
modifierFlags:NSAlternateKeyMask
timestamp:theEvent.timestamp
windowNumber:theEvent.windowNumber
context:theEvent.context
characters:@""
charactersIgnoringModifiers:@""
isARepeat:NO
keyCode:0];
return newEvent;
【讨论】:
以上是关于捕获 NSEvent 以添加修饰符问题的主要内容,如果未能解决你的问题,请参考以下文章