美文网首页
Mac OS开发 NSViewController获取键盘响应事

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

作者: 路漫漫其修远兮Wzt | 来源:发表于2020-02-29 12:06 被阅读0次

    版权声明:原文为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获取键盘响应事

          本文链接:https://www.haomeiwen.com/subject/qkxphhtx.html