有谁知道最好的方法来防止退出键关闭NSPanel
当它是关键窗口?我的面板是一个子窗口,我希望它更像一个窗口的半永久部分,更像一个抽屉,对于文本控件,我希望使用Escape键取消编辑。防止退出键关闭与关闭框的NSPanel
我最近在Cocoa文档中发现了更多关于windows和Escape键的内容。在cancelOperation:
下的NSResponder类参考中,它表示“该窗口向第一响应者发送默认动作消息cancelOperation:
,并且从那里消息沿着响应者链向上传播”。 NSPanel
似乎是不同的,并且窗口关闭时没有第一响应者得到cancelOperation:
呼叫或NSTextView代表得到他们的doCommandBySelector:
呼叫。
我对& out of the responder链的了解是可耻的,因为我一直在做OS X的工作。我在想,我需要在我的NSPanel
子类中使keyDown:
的行为与普通窗口类似。我尝试覆盖NSPanel
,并可以捕获keyDown:
,将呼叫转接到NSWindow
的keyDown:
而不是super
,但没有任何更改,Escape仍然关闭窗口,而没有向第一响应者发送消息。那是合理的尝试?
我又试图彻底重新实现我的面板子keyDown:
,使其做到这一点:
[self.firstResponder cancelOperation:self]
我认为这将让我的文本字段处理逃逸怎么通常希望,也许如果没有文本领域是第一响应者,那么这个电话就会死光。不过,我尝试了它,面板就像之前一样关闭。很明显,我并没有在正确的层面拦截事情。
有没有人知道在低级别按键事件和面板关闭之间运行的方法序列,或者我需要重写以拦截它,并确保cancelOperation:
去我的第一响应者?