我正在编写一个显示菜单栏图标的小型 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(使用前将#替换为@)