【问题标题】:Double-click action for menu bar icon in Mac OSXMac OSX 中菜单栏图标的双击操作
【发布时间】:2016-09-08 20:26:41
【问题描述】:

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

我想为菜单栏图标设置一个“默认”操作。基本上,在双击时执行一个动作,而不必从菜单中选择动作。

我查看了 Apple 文档,NSStatusItem 中有这样的东西,称为 doubleAction,但它已被软性弃用,并且(似乎)不起作用。此外,它说使用 button 属性的文档,但尝试这样做会导致编译器错误如下所示:

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

【问题讨论】:

  • 我认为这意味着在按钮上设置动作。不是双重动作。
  • 当然,但那是单击操作,而不是双击。单击它会弹出菜单,没关系。我希望能够为双击添加一个动作。

标签: objective-c macos cocoa nsstatusitem


【解决方案1】:

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

  • NSStatusItemdoubleAction 已弃用(实际上并没有工作)。
  • Apple 告诉您使用button 属性-但doubleAction 没有标头(我想知道是否存在实现)。哦,它也是只读的。
  • NSStatusItem 的任何属性中都没有关于左/右/双击的其他选项。

解决方法:为 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

如您所见,此处理程序仅处理具有特定 tag 值的 NSButton 实例。

当检测到点击时,我会将调用推迟到super,以便按系统的双击间隔进行处理。如果在那段时间内我再次收到点击,我会取消对super 的调用并将其视为双击。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    您可以使用NSApp.currentEvent

    self.statusItem.button.target = self;
    self.statusItem.button.action = @selector(clickOnStatusItem:);
    

    ...

    - (void)clickOnStatusItem:(id)sender {
        if (NSApp.currentEvent.clickCount == 2) {
            // Double click on status item
        }
    }
    

    另外,您可以在状态栏项目上处理鼠标右键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2013-01-06
      • 1970-01-01
      • 2020-02-14
      • 2010-09-13
      • 2014-02-23
      相关资源
      最近更新 更多