Objective c NSWindow不';无法接收键盘事件
我以编程方式创建NSWindow,无法接收任何键盘消息。我没有这样做,而是在Xcode编辑器中键入,但此时我的窗口处于焦点位置。我如何拦截这些事件 这是我的密码:Objective c NSWindow不';无法接收键盘事件,objective-c,events,keyboard,nswindow,Objective C,Events,Keyboard,Nswindow,我以编程方式创建NSWindow,无法接收任何键盘消息。我没有这样做,而是在Xcode编辑器中键入,但此时我的窗口处于焦点位置。我如何拦截这些事件 这是我的密码: //// delegate @interface MyDelegate : NSObject @end @implementation MyDelegate @end //// view @interface MyView : NSView @end @implementation MyView - (BOOL)isOpaque
//// delegate
@interface MyDelegate : NSObject
@end
@implementation MyDelegate
@end
//// view
@interface MyView : NSView
@end
@implementation MyView
- (BOOL)isOpaque { return YES;}
- (BOOL)canBecomeKeyView { return YES;}
- (BOOL)acceptsFirstResponder { return YES;}
- (void)keyDown:(NSEvent *)event
{
printf("PRESS\n"); // it's ignoring
}
@end
//// main
int main(int argc, const char **argv){
[NSApplication sharedApplication];
NSWindow *window = [[NSWindow alloc]
initWithContentRect:NSMakeRect( 0, 0, 100, 100 )
styleMask:NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[window setContentView: [[MyView alloc] init]];
[window setDelegate: [[MyDelegate alloc] init] ];
[window setAcceptsMouseMovedEvents:YES];
[window setLevel: NSFloatingWindowLevel];
[window makeKeyAndOrderFront: nil];
[NSApp run];
return 0;
}
您需要使应用程序成为前台应用程序。这是主窗口接收关键事件所必需的
ProcessSerialNumber psn = {0, kCurrentProcess};
OSStatus status =
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
这对我有帮助。不知道为什么进程在默认情况下不是前台应用程序。。。