KeyDown和Cocoa示例

And*_*rdi 5 cocoa osx-leopard

我正在学习如何使用Cocoa构建程序.我正在使用一个样本Apple应用程序来记录网络摄像头的视频.我想通过捕获按键开始和停止视频.我试图覆盖keydown事件,但我已经读过它是不可能的NSObject.我该如何处理这类活动?

应用程序NSObject类扩展了一个类.

这是代码:

- (void)keyDown:(NSEvent *)event {
  NSLog(@"Hi there");
  NSString *characters = [event characters];
  if ([characters length]) {
    switch ([characters characterAtIndex:0]) {
      case NSUpArrowFunctionKey:
      NSLog(@"Key UP");
      break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*sey 7

我试图覆盖Keydown事件,但我已经读过它在NSObject中是不可能的.

正确.只有响应者才能响应事件.

我该如何处理这类活动?

实施响应者.子类化NSWindow或NSWindowController将起作用.确保将实际的窗口或窗口控制器作为子类的实例.

Cocoa文档进一步解释.

应用程序类扩展了NSObject类.

为什么?通常,应用程序包的主要类是NSApplication或其子类 - 并且没有很多很好的理由来继承NSApplication.

PS:开始学习MacOS编程是一本非常好的书?

我没有学习Hillegass的书,我自己(我坚持使用Apple的文档),但这是一个非常受欢迎的推荐,我已经阅读过,并且可以告诉你这很好.