我试过阅读Apple文档,但我找不到如何将关键事件(空间或其他)捕获到NSDocument应用程序中。
如果我理解的话,使用initialFirstRepsodner是不可能的。
有什么想法吗?
感谢所有人! 安德烈答案 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”