如何在NSWINDOW中捕获Escape Key



我有一个与NswindowController(故事板入口点)的故事板,其内容是NSViewController。当用户在我的应用程序中选择Menuitem时,我将加载故事板并显示。

现在,我希望"逃生"键关闭窗口。我已经看到了几个问题,但是没有一个与我看到的行为相匹配的。

我将NSWINDOWCONTROLLER和NSVIEWCONTROLLER归为分类,并将情节板中的控制器设置为这些控制器。我尝试了我可以找到或想到的每种方法,包括:

  • override func cancelOperation(_ sender: Any?)
  • func cancel(_ sender: Any?)
  • override func keyDown(with event: NSEvent)

在窗口控制器,视图控制器,甚至是自定义的NSWINDOW子类中,但这些方法都没有被调用。我已经确认viewDidLoad()windowDidLoad()确实被调用,因此我的课程正在使用。他们只是没有参加活动。

为了验证我的理智,我尝试检查响应链。正如预期的那样,我的自定义窗口控制器和视图控制器类都在其中,Nswindow子类也在其中。

为什么响应器链中的nsresponder对象不会收到事件?

// monitor ESC key
NSEvent* (^handler)(NSEvent*) = ^(NSEvent *event) {
    if(event.keyCode == 53) {
        [self keyDown:event];
    }
    return event;
};
eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:handler];

将这些代码放入nswindowController或AppDelegate类中。

最新更新