それが今日立っているような状況(Xcodeの7.3.1、OSX 10.11.4):
NSStatusItem
のdoubleAction
は非推奨(と実際に動作していない)されます。
- Appleは
button
プロパティを使用するように指示しますが、doubleAction
のヘッダーはありません(実装が存在するかどうかは疑問です)。ああ、それはまた、読み取り専用です。
NSStatusItem
のいずれかのプロパティの左/右/右クリックに関するその他のオプションはありません。
回避策:ダブルクリックは、以下のように、検出された(Appleは話していたこととまったく同じ)NSButtonのカテゴリを作成して投稿することをカスタムクリックハンドラを実装通知:
に
@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
へのコールをキャンセルし、ダブルクリックとして処理します。
希望すると助かります!
ステータスバーの項目上でマウスの右ボタンを処理することができ、
NSApp.currentEvent
...また
を使用することができますボタンの上に。ダブルアクションではありません。 – rocky
もちろん、これはシングルクリックアクションであり、ダブルクリックではありません。シングルクリックでメニューがポップアップしてもOKです。私はダブルクリックのためのアクションを追加できるようにしたい。 – DarkByte