按 Option 键隐藏/显示应用程序主菜单中的菜单项

2024-04-14

我想在应用程序的主菜单中添加一个很少使用的菜单项。我希望它默认隐藏,仅当用户按住 Option 键时才显示。我该怎么做呢?

看来我应该处理flagsChanged:, 但它是NSResponder的方法和NSMenu不继承自NSResponder?我在主窗口控制器中尝试过它,当我在单击菜单之前按 Option 键时它会起作用。以下用例不起作用:单击菜单项(没有项目),按选项键 - 我的项目应该出现,释放选项键 - 项目应该消失。

我也尝试过 NSEvent 的addLocalMonitorForEventsMatchingMask:handler: and addGlobalMonitorForEventsMatchingMask:handler: for NSFlagsChangedMask但是,当主菜单打开时按下选项键时,本地或全局处理程序都不会被触发。

我怎样才能做到这一点?


构建菜单时包括可选项目并将其标记为隐藏。然后将类实例设置为菜单的委托,并在菜单打开时添加运行循环观察器以控制可选项目的隐藏状态。

@implementation AppController {
    CFRunLoopObserverRef _menuObserver;
}

- (void)updateMenu {
    BOOL hideOptionalMenuItems = ([NSEvent modifierFlags] & NSAlternateKeyMask) != NSAlternateKeyMask;
    [self.optionalMenuItem setHidden:hideOptionalMenuItems];
}

- (void)menuWillOpen:(NSMenu *)menu {
    [self updateMenu];

    if (_menuObserver == NULL) {
        _menuObserver = CFRunLoopObserverCreateWithHandler(NULL, kCFRunLoopBeforeWaiting, true, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
            [self updateMenu];
        });

        CFRunLoopAddObserver(CFRunLoopGetCurrent(), _menuObserver, kCFRunLoopCommonModes);
    }
}

- (void)menuDidClose:(NSMenu *)menu {
    if (_menuObserver != NULL) {
        CFRunLoopObserverInvalidate(_menuObserver);
        CFRelease(_menuObserver);
        _menuObserver = NULL;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按 Option 键隐藏/显示应用程序主菜单中的菜单项 的相关文章

随机推荐

  • 如果字符串是...然后用图像替换它?

    我有以下代码 对此有三种可能的字符串输出 food drink food Drink 我想用小图标替换这些字符串 例如代表 饮料 的玻璃杯 有没有一种简单的方法可以用 PHP 来做到这一点 Thanks 您可以通过数组映射值 items a
  • 鉴于其中一些变量可能不存在,如何保留变量列表?

    我有100个dta文件 我有一个我需要的变量列表keep并即时保存临时副本 某些变量可能存在于某个特定的环境中 也可能不存在dta 我需要 Stata 来保留 a 中存在的所有变量dta并忽略那些不存在的 下面的代码有错误的语法 但它可以作
  • div 内的左/右浮动按钮

    如何让按钮只浮动在div区域 这是我的 CSS 和 HTML 示例 test width 60 display inline overflow auto white space nowrap margin 0px auto div clas
  • 将自定义中心按钮添加到选项卡栏的最佳方法是什么?

    许多应用程序都有一个标准选项卡栏 中间有一个自定义按钮 可以执行一些特殊功能 一些例子可以在这里找到 http mobile patterns com custom tab navigation http mobile patterns c
  • Powershell Get-ChildItem 目录中的最新文件

    我们生成名称中带有日期的文件 下面是日期的通配符 我想获取最后一个文件 并且包含该文件的文件夹的标题中也有一个日期 仅月份 我正在使用 PowerShell 并安排它每天运行 这是到目前为止的脚本 LastFile DailyFile co
  • 使用项目资源(WPF)的图像源

    我添加了一堆图像作为项目资源 现在我想在我的 WPF 应用程序中使用图像控件来使用它们 如何将资源分配给图像控件的源 首先 在 Visual Studio 的属性窗口中将图像文件标记为 资源 然后您可以很容易地使用文件名引用资源
  • 多个 bitbucket 帐户的 ssh 配置 - 简单的示例,但出现“远程端意外挂断”

    假设我的 bitbucket 用户名是 jon 并且我有一些个人项目https bitbucket org jon 假设我加入了一个开发团队 该团队有一个名为 devteam 的 bitbucket 帐户 可以在以下位置找到该帐户 http
  • 一个月中的一周熊猫

    我试图每个月坚持一周 有些月份可能有四个星期 有些可能有五个星期 对于每个日期 我想知道它属于哪一周 我最感兴趣的是本月的最后一周 data pd DataFrame pd date range 1 1 2000 periods 100 f
  • 如何使用反射更改 kotlin 私有 val?

    我可以使用反射访问私有 val 值 如下所示 fun main val mainClass MainClass val f MainClass class memberProperties find it name info f let i
  • 一瞥让一切都慢了 50 倍

    我一直在使用glimpse来尝试解决一些页面速度慢的问题 结果发现glipse就是原因 页面请求超过 30000 秒 毫不夸张地说它们是即时的 所以我一直在追鬼 当导致如此速度差异时 我如何使用一瞥来查看一切需要多长时间 我是否配置错误或者
  • 如何在 iPad 硬件中(而不是在模拟器中)测试 iPad 应用程序

    在 iPad 模拟器上完成构建和测试后 我需要在 iPad 硬件上测试该应用程序 我怎样才能做到这一点 如果您已支付开发人员密钥的费用 则应该能够打开管理器窗口 设置您的设备 然后选择设备而不是模拟器作为 XCode 中的目标 看苹果的文档
  • 更高效的 matplotlib 堆积条形图 - 如何计算底部值

    我需要一些帮助 使用 matlibplot 在 python 中制作一组堆积条形图 我的基本代码如下 但我的问题是如何生成值bottom对于第二个之外的任何元素有效率的 我可以让示例图正确堆叠 始终从下到上为 a b c d import
  • 我应该在 OBDII 的 BLE IOS 设备中使用什么 BLE 特性

    您好 我想知道我应该从这个 OBDII BLE 设备 加密狗中使用什么写入和通知特性 我想在 Flutter 中创建一个适用于 IOS 的程序 有不少 Device name VEEPEAK Device id 34E2B2AF 60F4
  • 更改值结转次数的 maxgap

    我有一个类似于以下内容的数据框 library data table test lt data table data frame value c 5 NA 8 NA NA 8 6 NA NA 10 locf N c 1 NA 1 NA NA
  • google.script.run.withSuccessHandler() 返回未定义

    我使用下面提供的代码在单独的 GS 文件中创建了一个数组 我尝试在 HTML 文件中调用它 我的目标是将数组的内容与参数进行比较email 但是 返回的值google script run withSuccessHandler is und
  • 来自浏览器的带有正文的异步 GET 请求

    好吧 我知道这是一个坏主意 不应该这样做 但为了这个问题 请假设没有其他方法 我得到的 API 端点需要以空对象作为主体的 GET 请求 有没有办法从浏览器执行异步请求 我在用着axios使用的库XMLHttpRequest在引擎盖下和MD
  • 如何在Qt中暂时断开与插槽的信号?

    我用信号连接一个插槽 但现在我想暂时断开它们的连接 这是我的班级声明的一部分 class frmMain public QWidget private QTimer myReadTimer private slots void on btn
  • POST 请求(Javascript)

    如何在 Javascript 中发出简单的 POST 请求而不使用表单且不回发 虽然我从 sundeep 答案中获取代码示例 但为了完整性而将代码发布在此处 var url sample url php var params lorem i
  • 如何在 Django 1.8 中使用 jinja2 作为模板引擎

    我一直在研究如何在 django 1 8 中使用 jinja2 但是没有将 django 与 jinja2 一起使用的完整源代码 我想知道你们是否知道在 django 中使用 jinja2 的过程 我查看了官方文档并查看了以下问题 如何设置
  • 按 Option 键隐藏/显示应用程序主菜单中的菜单项

    我想在应用程序的主菜单中添加一个很少使用的菜单项 我希望它默认隐藏 仅当用户按住 Option 键时才显示 我该怎么做呢 看来我应该处理flagsChanged 但它是NSResponder的方法和NSMenu不继承自NSResponder