版權(quán)聲明:原文為CSDN博主「哈爾濱的酸檸檬」的原創(chuàng)文章比被,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議酬核,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sinat_31177681/article/details/81080644
摘要:在開(kāi)發(fā)MAC應(yīng)用時(shí),現(xiàn)在新版本的Xcode搭建界面大多都是在ViewController上,而非NSWindow。當(dāng)應(yīng)用程序運(yùn)行時(shí),按下鍵盤上的按鍵不會(huì)經(jīng)過(guò)keyDown這個(gè)方法。#import"ViewController.h"@implementationViewController-(void)keyDown:(NSEvent*)event{NSLog(@"%hu",event.keyCode);}@end這涉及到響應(yīng)者鏈的問(wèn)題凸主。
在開(kāi)發(fā)MAC應(yīng)用時(shí),現(xiàn)在新版本的Xcode搭建界面大多都是在ViewController上,而非NSWindow。當(dāng)應(yīng)用程序運(yùn)行時(shí),按下鍵盤上的按鍵不會(huì)經(jīng)過(guò)keyDown這個(gè)方法额湘。
-(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;
}];
}
這涉及到響應(yīng)者鏈的問(wèn)題卿吐。如何才能在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
}
}
然后再運(yùn)行程序便可以接收keyDown事件旁舰。