有谁知道防止转义键NSPanel
在键窗口时关闭的最佳方法?我的面板是一个子窗口,我希望它的行为更像是窗口的半永久性部分,更像是一个抽屉,对于其中的文本控件,我想让 Escape 键取消编辑。
我最近在 Cocoa 文档中发现了更多关于 windows 和 Escape 键的信息。在 NSResponder 类参考中,它说“窗口向第一响应者cancelOperation:
发送默认操作消息,然后消息从那里向上传播到响应者链”。cancelOperation:
对于 , 似乎有所不同NSPanel
,并且窗口在没有第一响应者cancelOperation:
接到呼叫或 NSTextView 代表接到他们的doCommandBySelector:
呼叫的情况下关闭。
考虑到我一直在做 OS X 工作,我对响应者链的进出的了解是可耻的。我在想我需要让keyDown:
我的NSPanel
子类表现得像一个普通的窗口。我尝试覆盖NSPanel
and can catch keyDown:
,将呼叫转发到NSWindow
'skeyDown:
而不是super
,但没有任何变化,Escape 仍然关闭了窗口,没有消息给第一响应者。尝试这样做是否合理?
然后我尝试完全重新实现我的面板子类' keyDown:
,让它这样做:
[self.firstResponder cancelOperation:self]
我认为这会让我的文本字段按照它通常期望的方式处理转义,也许如果没有文本字段是第一响应者,那么呼叫将结束。但是,我试过了,面板就像以前一样简单地关闭了。显然我没有在正确的水平上拦截事情。
有谁知道在低级按键事件和面板关闭之间运行的方法序列是什么,或者我需要覆盖什么来拦截它并确保cancelOperation:
我的第一响应者?