NSDocument和键盘(如keyDown)

时间:2009-10-06 15:55:34

标签: objective-c cocoa nsdocument

我试过阅读Apple文档,但我找不到如何将关键事件(空间或其他)捕获到NSDocument应用程序中。

如果我理解的话,使用initialFirstRepsodner是不可能的。

有什么想法吗?

感谢所有人! 安德烈

5 个答案:

答案 0 :(得分:1)

  

我试过阅读Apple文档,但我找不到如何将关键事件(空格或其他)捕获到NSDocument应用程序中。

您想要为关键事件处理什么?您需要在某处实现keyDown:,但具体取决于您打算做什么。

答案 1 :(得分:0)

如果要捕获进入窗口的所有事件,可以将其子类化并覆盖-sendEvent:。如果要捕获整个应用程序中的所有事件,可以在NSApplication子类中覆盖相同的方法。

答案 2 :(得分:0)

首先,我要感谢彼得的帮助!

我使用过热键,这个样本非常实用!

http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/

感谢所有人! 安德烈

答案 3 :(得分:0)

首先,您必须创建NSWindow的子类。 在xcode中:文件 - >新文件 - >目标C类。 给出一个像“NSWindowMyEvents”这样的名字。这将创建2个文件:.h& .m,转到NSWindowMyEvents.h并按如下方式声明:

@interface NSWindowMyEvents : NSWindow {

}

保存更改并编译(以确保IB读取新标头0,如果它已经打开)。

打开界面构建器并加载包含文档/主窗口的nib / xib文件。 确保文件所有者的“窗口”插座设置为主窗口。 单击您的主窗口(您想要获取事件的窗口)并将其类(通过Identity inspector cmd + 6)设置为:NSWindowMyEvents而不是NSWindow它现在是。

保存更改!

返回xcode和NSWindowMyEvents.m并粘贴以下代码:

- (void)keyDown:(NSEvent *)theEvent
{
    NSLog(@"keyDown!");
    if ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask)
    {
        NSLog(@"CommandKey Down!");
    }

    [super keyDown:theEvent];
}

将事件发送到您想要的超级IF,将事件传递给其他响应者链。 您现在正在处理键盘事件。 同样,您可以处理NSWindowMyEvent.m

中的任何事件

希望有所帮助....

答案 4 :(得分:-1)

我建议使用NSUserDefaults并存储您的共享全局密钥组合,然后检查keyDown:对照那些存储的首选项,然后根据按下的键来执行操作。

即:#define kMyKeyCommand @“i”