代码之家  ›  专栏  ›  技术社区  ›  Andrea Girardi

KeyDown和Cocoa样本

  •  5
  • Andrea Girardi  · 技术社区  · 15 年前

    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;
        }
      }
    }
    
    3 回复  |  直到 9 年前
        1
  •  7
  •   Peter Hosey    15 年前

    我试图覆盖Keydown事件,但我读到在NSObject中这是不可能的。

    我如何处理这类事件?

    实现一个响应程序。子类化NSWindow或NSWindowController将起作用。确保将实际的窗口或窗口控制器设置为子类的实例。

    Cocoa文档对此作了进一步解释。

    应用程序类扩展了NSObject类。

    PS:学习MacOS编程的一本好书是什么?

    我自己并没有从Hillegass的书中学到什么(我坚持使用苹果的文档),但这是一个非常受欢迎的推荐,我读过它,可以告诉你它很好。

        2
  •  4
  •   IlDan    15 年前

    Cocoa Event-Handling Guide - The Responder Chain :

    响应程序链是一系列应用了事件或操作消息的响应程序对象的链接。当给定的响应者对象不处理特定消息时,该对象将消息传递给链中的后续响应者(即其下一个响应者)。

    当您按下一个键时,窗口接收keyDown事件。然后它将事件发送到 第一响应者

    如果第一响应者没有 按键(Safari地址字段在显示字符时会吃掉它),然后将其向下传递 响应链 下一个响应者 在视图层次结构中,然后连接到窗口和窗口控制器,如中所示 Guide . (注意行动响应者是另一个故事。)

    因此,您必须实现keyDown:在窗口的一个视图上,或者在窗口本身中,如果它没有吃事件的视图的话。最简单的测试方法是重写空窗口的keyDown:method

    要将您的手放在内部工作中,您甚至可以尝试重写窗口的sendEvent:方法。sendEvent:将事件分派到窗口的视图中,例如,您可以从那里记录窗口管理的所有事件。

        3
  •  4
  •   Old McStopher    15 年前

    子类化NSWindow或

    类似地,您可以将NSView子类化并重写其事件处理方法。

    MacOS编程?

    Learn Objective-C on the Mac Dalrymple非常直截了当,涵盖了足够的基础知识,移动速度足够快,可以让你在短时间内离开地面。它涉及从Xcode和Interface Builder到OOP和Objective-C实践的所有内容。对初学者有帮助(IMHO)是源文件组织和基础工具包章节。

    推荐文章