我想处理主窗口的顶级关键事件。我的理解是否应该如何实现呢?
我可以创建一个NSWindowController
子类并覆盖其keyDown
事件(因为控制器是响应者链的一部分),并将主NIB的文件所有者设置为所述控制器类。现在,因为主窗口是在NSApplicationMain
的内部创建的,并且窗口所有者无条件地设置为NSApplication
,所以我必须放弃这个并使用initWithWindowNibName:
以编程方式创建主窗口,写一些样板设置其委托,显示窗口等
另一种可能性是继承NSWindow
类,覆盖其keyDown
事件并将主窗口的类设置为它,但这带来了许多问题:现在我需要所有的插件窗口实际上对事件做了一些事情,它变成了自己的控制器。
此时我正在进行极端yak shaving以解决一个看似简单的问题。我怀疑这可能是由于我对Cocoa的经验不足,但有没有更好的Proper™方法呢?我觉得我真的不应该去做这些杂技。
P.S。
据我所知,这也适用于performKeyEquivalent
keyDown
。