Mac OS開發 NSViewController獲取鍵盤響應事件
阿新 • • 發佈:2018-11-15
- 摘要:在開發MAC應用時,現在新版本的Xcode搭建介面大多都是在ViewController上,而非NSWindow。當應用程式執行時,按下鍵盤上的按鍵不會經過keyDown這個方法。#import"ViewController.h"@implementationViewController-(void)keyDown:(NSEvent*)event{NSLog(@"%hu",event.keyCode);}@end這涉及到響應者鏈的問題。
-
在開發MAC應用時,現在新版本的Xcode搭建介面大多都是在ViewController上,而非NSWindow。當應用程式執行時,按下鍵盤上的按鍵不會經過keyDown這個方法。
#import "ViewController.h"
@implementation ViewController
-(void)keyDown:(NSEvent *)event{
NSLog(@"%hu",event.keyCode);
}
@end這涉及到響應者鏈的問題。如何才能在ViewController中獲取鍵盤事件呢?可以在-(void)awakeFromNib中新增如下程式碼
oc版本:
-(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;
}];
}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事件。