objective-c – NSWindow不接收键盘事件
发布时间:2020-12-16 07:01:05 所属栏目:百科 来源:网络整理
导读:我以编程方式创建NSWindow,我无法接收任何键盘消息.而不是我输入 Xcode编辑器,但此时我的窗口是焦点.我如何拦截这些事件? 这是我的代码: //// delegate@interface MyDelegate : NSObject@end@implementation MyDelegate@end//// view@interface MyView : N
我以编程方式创建NSWindow,我无法接收任何键盘消息.而不是我输入
Xcode编辑器,但此时我的窗口是焦点.我如何拦截这些事件?
这是我的代码: //// 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("PRESSn"); // it's ignoring } @end //// main int main(int argc,const char **argv){ [NSApplication sharedApplication]; NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect( 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |