我的Cocoa应用程序可以打开几个popover 如果单击其他任何位置,当前打开的弹出窗口将关闭(正常行为)
但是,我们还有一个热键可以更改应用程序的状态,我们希望弹出窗口关闭,类似于鼠标事件关闭它的方式。
一些popovers有用于输入用户输入的文本字段,我不想覆盖我的popover类来监听这个特定的热键关闭,但这是我现在唯一的想法< / p>
答案 0 :(得分:0)
一个想法是在您的应用程序更改状态时发送自定义NSNotification
,并让每个NSPopover
侦听该通知并关闭自己。
答案 1 :(得分:0)
提出了一个有趣的解决方案,就应用程序状态而言,实际上非常安全。
我遍历响应者链,寻找NSPopover,如果找到一个,我传递-cancelOperation
消息(按下ESC键发送)
这可以安全地关闭我的popovers
+ NSWindowController* windowController = [MyMainWindowController sharedWindowController];
+ NSResponder *responder = [[windowController window] firstResponder];
+ while ((responder = [responder nextResponder]))
+ {
+ if( [responder isKindOfClass:[NSPopover class]] )
+ {
+ [[windowController window] cancelOperation:nil];
+ break;
+ }
+ }