Mac OSX 中菜单栏图标的双击操作

2024-06-23

我正在编写一个显示菜单栏图标的小型 Mac OSX 应用程序。单击后,会弹出一个菜单。

我希望菜单栏图标有一个“默认”操作。基本上,双击时执行某个操作,而无需从菜单中选择该操作。

我查了一下苹果文档,里面有这样的东西NSStatusItem called doubleAction,但它已被软弃用并且(似乎)不起作用。更重要的是,它说使用的文档button属性,但尝试这样做会导致编译器错误,如下所示:

非常感谢任何代码或指导,谢谢!


目前的情况(Xcode 7.3.1,OSX 10.11.4):

  • the doubleAction of NSStatusItem已被弃用(并且实际上不起作用)。
  • 苹果告诉你使用button属性 - 但没有标题doubleAction(我想知道实施是否存在)。哦,它也是只读的。
  • 没有关于左/右/双击的任何其他选项NSStatusItem的属性。

The 解决方法:为 NSButton 创建一个类别(与 Apple 所讨论的完全相同)并实现一个自定义单击处理程序,该处理程序在检测到双击时发布通知,如下所示:

@implementation NSButton (CustomClick)

- (void)mouseDown:(NSEvent *)event {
    if (self.tag != kActivateCustomClick) {
        [super mouseDown:event];
        return;
    }

    switch (event.clickCount) {
        case 1: {
            [self performSelector:@selector(callMouseDownSuper:) withObject:event afterDelay:[NSEvent doubleClickInterval]];
            break;
        }
        case 2: {
            [NSRunLoop cancelPreviousPerformRequestsWithTarget:self];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"double_click_event" object:nil];
            break;
        }
    }
}

- (void)callMouseDownSuper:(NSEvent *)event {
    [super mouseDown:event];
}

@end

正如你所看到的,这个处理程序只处理NSButton具有特定的实例tag value.

当检测到点击时,我将调用推迟到super用于通过系统的双击间隔进行处理。如果在此时间内我再次收到点击,我会取消呼叫super并将其视为双击。

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac OSX 中菜单栏图标的双击操作 的相关文章

随机推荐

  • 在反应中点击渲染新组件

    我正在练习反应并尝试通过单击按钮来呈现新组件 这里的第一页是电子邮件 我想要呈现的组件包含密码页面 class App extends React Component passwordpage return
  • 通过反应流发送大文件

    我正在编写的应用程序的一部分需要将任意大 对于这个问题 我假设 100 200 GB 文件从客户端传输到服务器 重要的是 接收器 服务器 不存储该文件 它只是读取 检查流并将其发送到下一个点 因为我在任何时候都不需要整个文件 但希望同时进行
  • 正则表达式替换Python中的文本

    我的文字看起来像 Added a foo b foo 目标是使用一个正则表达式将第二个 foo 替换为 bar 并将两个双引号之间的第一个 foo 保持不变 所以在上面的文本中 我正在寻找的结果是 Added a foo b bar Tha
  • 如何将键盘焦点赋予弹出的 Gtk.Window

    我有一个弹出窗口 使用 WINDOW POPUP 类型创建 其中包含一些小部件 包括文本条目 问题是 当我单击该条目时 该条目没有获得焦点 因此我无法输入任何内容 我是否必须设置任何标志才能允许窗口获得键盘焦点 对于需要焦点的 gtk wi
  • Pandas DataFrame:根据条件替换列中的所有值

    我有一个简单的 DataFrame 如下所示 Team First Season Total Games 0 Dallas Cowboys 1960 894 1 Chicago Bears 1920 1357 2 Green Bay Pac
  • 如何调整 UITableView 的 tableHeaderView 的大小?

    我在调整 tableHeaderView 大小时遇到 问题 这么简单是行不通的 1 创建一个UITableView和UIView 100 x 320像素 2 将UIView设置为UITableView的tableHeaderView 3 构
  • 使应用程序成为系统关键流程

    我怎样才能创建一个关键系统进程 以便它不能从 C 中的任务管理器结束 一般来说 这是不可能的 因为这会剥夺用户的控制权 Windows 甚至允许您终止高度关键的进程 例如 csrss exe 请不要尝试终止它 保证立即出现 BSOD Ray
  • Kubernetes Pod 事件显示为“

    我们正在调查与 Azure Kubernetes 服务上的 Pod 启动缓慢相关的问题 Pod 启动完成后 我们将无法看到历史事件 最新的事件日志显示为
  • Angular Material 自定义组件主题

    我正在尝试在自定义 Angular Material 主题中为其他一些组件使用自定义调色板中的颜色 例如 带有垫子工具栏的 div 和带边距的图标 应使用主要背景颜色填充 关于主题的 Angular Material 指南说道 主题文件不应
  • Java Connection.close 是否回滚?

    Java Connection close 是否回滚到finally 块 我知道 Net SqlConnection close 可以做到这一点 有了这个 我可以在没有 catch 的情况下创建 try finally 块 Example
  • 如何配置仅在生产模式下运行 http 的 Keycloak 18?

    我遇到的情况是 我在终止安全 https 连接的反向代理后面运行 Keycloak 18 0 0 因此 我想构建一个 Docker 镜像 将 Keycloak 配置为仅侦听 http 例如端口 8080 我已经调整了Dockerfile来自
  • Nuxt 致命错误 TypeError:无法解构“this”的属性“nuxt”,因为它未定义

    当我尝试构建 docker 映像时 运行后出现此错误yarn build 0 0 496 yarn run v1 22 19 0 0 531 nuxt build 0 1 538 Using Tailwind CSS from assets
  • 如何使用 azure pipeline 生成 .AAB 文件并签署 Android 应用程序包

    我想使用 Azure 管道生成 Android 应用程序包 aab 文件 但在生成 Android 应用程序包文件时遇到问题 我已使用以下 Gradle 任务来生成并签署 aab 文件 但是 它生成 APK 文件 我想生成 aab 文件 t
  • Xcode 8.1 beta 3 - AQDefaultDevice 消息 [重复]

    这个问题在这里已经有答案了 从 beta2 开始 在创建音频输出单元后 我每两秒就会收到一条消息 2016 10 14 11 31 21 572479 MyProduct 94063 8294923 aqme 254 AQDefaultDe
  • 当条码扫描仪读取条码时,EditText焦点消失

    我需要读取应用程序的条形码 我为此使用触发式条码扫描仪 通过 USB 进行通信 如您所知 条形码扫描仪的工作原理类似于键盘 当设备读取条形码时 它会尝试将值写入具有焦点的输入 用户按下扳机 条码扫描器开始工作 直到 条码读取成功 然后它进入
  • 如何有选择地观察 Android Room 数据库 INSERT、DELETE 和 UPDATE 事件?

    我的 DAO 是这样设计的 Dao interface FooDao Query SELECT FROM foo LiveData
  • 按字母/字典顺序排列的两个字符串的平均值

    假设您采用字符串 a 和 z 并按字母顺序列出它们之间的所有字符串 a b c x y z 取这个列表的中点 你就会找到 m 所以这有点像取这两个字符串的平均值 您可以将其扩展到具有多个字符的字符串 例如 aa 和 zz 之间的中点将位于列
  • Wix\heat.exe 奇怪的输出

    我有一个目录 其中有一个文件 Iesi Collections dll 当我运行以下命令时 heat exe dir D MyDir cg References srd o D Product wxs nologo gg g1 dr INS
  • Perl 守护进程不与 Sleep() 一起工作

    我使用编写了一个简单的测试守护进程过程 守护进程 http search cpan org deti Proc Daemon 0 14 lib Proc Daemon pod 这是守护进程 usr bin perl use Proc Dae
  • Mac OSX 中菜单栏图标的双击操作

    我正在编写一个显示菜单栏图标的小型 Mac OSX 应用程序 单击后 会弹出一个菜单 我希望菜单栏图标有一个 默认 操作 基本上 双击时执行某个操作 而无需从菜单中选择该操作 我查了一下苹果文档 里面有这样的东西NSStatusItem c