1. 程式人生 > >Mac OS開發 NSViewController獲取鍵盤響應事件

Mac OS開發 NSViewController獲取鍵盤響應事件

  • 摘要:在開發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事件。