Mac OS开发 NSViewController获取键盘响应事件


版权声明:原文为CSDN博主「哈尔滨的酸柠檬」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_31177681/article/details/81080644


摘要:在开发MAC应用时,现在新版本的Xcode搭建界面大多都是在ViewController上,而非NSWindow。当应用程序运行时,按下键盘上的按键不会经过keyDown这个方法。#import"ViewController.h"@implementationViewController-(void)keyDown:(NSEvent*)event{NSLog(@"%hu",event.keyCode);}@end这涉及到响应者链的问题。
在开发MAC应用时,现在新版本的Xcode搭建界面大多都是在ViewController上,而非NSWindow。当应用程序运行时,按下键盘上的按键不会经过keyDown这个方法。

-(void)awakeFromNib { 
    [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskKeyDown handler:^NSEvent * _Nullable(NSEvent * _Nonnull aEvent) { 
        [self keyDown:aEvent]; 
        return aEvent; 
    }]; 
    [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskFlagsChanged handler:^NSEvent * _Nullable(NSEvent * _Nonnull aEvent) { 
        [self flagsChanged:aEvent]; 
        return aEvent; 
    }]; 
} 

这涉及到响应者链的问题。如何才能在ViewController中获取键盘事件呢?可以在-(void)awakeFromNib中添加如下代码
oc版本:

#import "ViewController.h" 
 
@implementation ViewController 
 
-(void)keyDown:(NSEvent *)event{ 
    NSLog(@"%hu",event.keyCode); 
}
 
@end 

Swift3.0版本:

override func awakeFromNib() { 
    NSEvent.addLocalMonitorForEvents(matching: .keyDown) { (aEvent) -> NSEvent? in 
        self.keyDown(with: aEvent) 
        return aEvent 
    } 
    NSEvent.addLocalMonitorForEvents(matching: .flagsChanged) { (aEvent) -> NSEvent? in 
        self.keyDown(with: aEvent) 
        return aEvent 
    } 
} 

然后再运行程序便可以接收keyDown事件。

你可能感兴趣的:(Mac OS开发 NSViewController获取键盘响应事件)