我有一个与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类中。