gpt4 book ai didi

objective-c - cocoa keyDown 事件不调用

转载 作者:行者123 更新时间:2023-12-03 16:57:08 27 4
gpt4 key购买 nike

这是我的代码:

#import <Cocoa/cocoa.h>
#import <AppKit/AppKit.h>

@interface OGLView: NSOpenGLView{}
@end

@implementation OGLView

- (void)keyDown:(NSEvent *)event {
NSLog(@"Hi there");//never called
}

- (BOOL)acceptsFirstResponder{return YES;}

- (BOOL)becomeFirstResponder{return YES;}

- (BOOL)resignFirstResponder{return YES;}

- (BOOL)canBecomeKeyView { return YES; }
@end

int main( int argc, char* args[] ){
NSWindow *win = nil;
NSRect e = [[NSScreen mainScreen] frame];

win = [ [NSWindow alloc]
initWithContentRect: e
styleMask: NSTitledWindowMask
|NSClosableWindowMask
|NSMiniaturizableWindowMask
backing: NSBackingStoreBuffered
defer: NO ];


view =[[[OGLView alloc] initWithFrame:e]
autorelease];


[win orderFrontRegardless];
[win setReleasedWhenClosed:YES];
[win setContentView:view];

[win setInitialFirstResponder:view];
[win setNextResponder:view];
[win makeFirstResponder:view];


[win setAcceptsMouseMovedEvents:YES];



[view setNeedsDisplay:YES];
[view display];
}

我必须创建 NSResponder 子类吗?还是NSCcontroller?如何将此子类连接到我的 OGLView?请帮忙..我是 Objective-C 的新手。我也在 E​​clipse(不是 Xcode)上编程

最佳答案

您不能将此代码放入 main() 中。没有应用程序对象,因此没有到窗口服务器的连接。没有事件循环。坦率地说,正如代码所示,您的程序将立即退出,因为没有什么可以阻止执行从 main() 的末尾掉下来。 .

您的main()应该打电话NSApplicationMain() 。理想情况下,您的应用程序应与 Info.plist 文件和 MainMenu NIB 正确捆绑。加载该 NIB 将实例化您设计的 Controller 类的实例,并将其指定为应用程序对象的委托(delegate)。然后,您可以将像您这样的早期启动代码放入应用程序委托(delegate)的 -applicationDidFinishLaunching: 中。方法。

如果由于某种原因您拒绝使用NIB,您可以调用[NSApplication sharedApplication]在你的main() 。实例化您的 Controller 类并使用 [NSApp setDelegate:yourObject] 直接将其分配为应用程序对象的委托(delegate)。然后调用[NSApp run] 。同样,进一步的初始化应该在委托(delegate)的方法中完成。

关于objective-c - cocoa keyDown 事件不调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30398605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com