KeyEvents in Cocoa and XCode



我通过为OSX构建一个基本的计算器应用程序来学习Objective-C。一切都很好,除了我需要允许按下键盘上的某些键,就像点击界面上的按钮一样。

我读到的所有东西都说要捕获这些你必须在NSResponder的子类中有逻辑。我的问题在于我如何"连接"那个文件。创建一个新的。h和。m文件,将NSResponder子类化,如下所示:

Responder.h


#import <Foundation/Foundation.h>
@interface Responder : NSResponder
   - (void)keyDown:(NSEvent *)event;
@end

Responder.m


#import "Responder.h"
@implementation Responder
- (void)keyDown:(NSEvent *)event {
    NSAlert *alert = [[NSAlert alloc] init];
    [alert addButtonWithTitle:@"OK"];
    [alert setMessageText:@"Hey"];
    [alert setInformativeText:@"You Pressed A Key!"];
    [alert setAlertStyle:NSWarningAlertStyle];
    [alert runModal];
}
@end

应用程序如何知道使用该文件?接口中是否有。xib文件,我拖动蓝色箭头和"连接"它的地方?我做得对吗?我在谷歌上搜索了一段时间所有东西都假设我知道如何让NSResponder子类进入我的应用。我觉得我遗漏了一个基本概念。任何帮助都是感激的!

当人们说"在NSResponder的子类中"时,他们不一定意味着你应该创建一个新的 NSResponder子类。他们的意思是:按键是由响应者处理的。你的应用结构中充满了响应器!因此,要干预键处理过程,可以对中的一个进行子类化(以便有地方放置代码)。

您缺少的"基本概念"是响应链:

https://developer.apple.com/library/mac/文档/可可/概念/EventOverview/EventArchitecture EventArchitecture.html

(向下滚动到标题"Responder Chain")

窗口控制器是放置这类代码的常见地方。NSWindowController是NSResponder的子类。它在应答器链的顶端,你可能已经有了它的类。

另一个选择是使用视图。NSView是NSResponder的子类,你的窗口充满了视图。把一个不活跃的NSView放在窗口中所有东西的后面并不奇怪,只是作为一个backstop NSResponder来捕捉链上出现的事件。

相关内容

  • 没有找到相关文章

最新更新