1

I've tried to read on apple documentation but I can't find anywhere how to capture key event (space or other) into an NSDocument application.

With initialFirstRepsodner if I've understand well it's not possible to do.

Any idea?

thanks to all! Andrea

4

5 回答 5

1

我试图阅读苹果文档,但在任何地方都找不到如何将关键事件(空格或其他)捕获到 NSDocument 应用程序中。

你想为什么处理关键事件?您需要在keyDown:某个地方实施,但具体在哪里取决于您打算做什么。

于 2009-10-07T02:51:05.387 回答
0

首先你必须创建一个 NSWindow 的子类。在 xcode 中执行:文件 -> 新文件 -> 目标 C 类。取一个类似“NSWindowMyEvents”的名称。这将创建 2 个文件:.h 和 .m,转到 NSWindowMyEvents.h 并进行如下声明:

@interface NSWindowMyEvents : NSWindow {

}

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

打开界面生成器并加载包含文档/主窗口的 nib/xib 文件。确保文件所有者的“窗口”出口设置为您的主窗口。单击您的主窗口(您想要获取事件的窗口)并将其类(通过身份检查器 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 中的任何事件

希望有帮助....

于 2010-11-04T19:59:37.070 回答
0

如果你想捕捉到一个窗口的所有事件,你可以继承它并覆盖 -sendEvent:。如果要捕获整个应用程序中的所有事件,可以在 NSApplication 子类中重写相同的方法。

于 2009-10-06T17:17:03.500 回答
0

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

我使用了热键,这个示例非常有用!

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

谢谢大家!安德烈亚

于 2009-10-09T19:33:47.283 回答
-1

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

即:#define kMyKeyCommand @"i"

于 2010-05-19T22:02:40.680 回答