objective-c - 在没有菜单栏的应用程序中关闭 Cocoa 中最前面的窗口

标签 objective-c cocoa keyboard-shortcuts statusbar menubar

我正在 Cocoa 中构建 StatusBar 应用程序,因此我没有菜单。没有菜单意味着没有“文件 > 关闭”菜单项,该菜单项通常监听快捷键“Command + W”。

从我的 StatusBar 应用程序中,用户可以打开一个窗口来更改首选项,这就是我遇到问题的地方:用户只能通过用鼠标按红点来关闭窗口。然而,像所有应用程序一样,我也想支持“Command + W”快捷键。

目前我看到解决此问题的两种可能性:

  1. 在窗口上放置一个不可见的按钮来监听快捷方式。
  2. 为快捷方式添加应用程序范围的监听器并手动联系窗口。

这两种解决方案都感觉像是对系统的滥用。第一个解决方案可能会导致意外行为(如果用户偶然点击不可见按钮,窗口将关闭),而第二个解决方案仍然会导致蜂鸣声,因为窗口不知道它处理这样的快捷方式。

有没有一种优雅的方法来解决这个问题?由于 View 应该知道要做什么,因此仅使用 Interface Builder 的解决方案将是完美的。如果没有优雅的方法,有没有办法增强提到的解决方案?

提前致谢!

最佳答案

如果您将"file">“关闭”菜单项放在 MainMenu Nib 中,即使菜单不可见,该快捷方式也将起作用。

如果您选择为快捷方式实现应用程序范围的监听器,则可以通过从 block 返回 nil 来消除蜂鸣声,这样原始事件就不会被传递。

关于objective-c - 在没有菜单栏的应用程序中关闭 Cocoa 中最前面的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083745/

相关文章:

xcode - 如何在 addSubview 之后添加约束,以便 subview 随父 View 调整大小

iphone - 从相机拍摄照片后如何跳过 'retake and use' 选项

iphone - 如何在不使用导航 Controller 的情况下创建基于多 View 的应用程序?

xcode - Cocoa 绑定(bind) + 过滤谓词 + 自动重新排列内容 = 崩溃

objective-c - Cocoa 关闭/隐藏/更改选项卡通知

c++ - 特定资源语言的 LoadAccelerators

macos - cmd-key-happy 在 OS X 10.6.6 上失效了吗?

objective-c - NSWindow 不响应击键命令 -s

c++ - 枚举 objective-C 和 "<<"运算符

ios - 从 APNS 消息中获取数据