カスタムNSViewを含むNSMenuItemを持つNSStatusItemがあります。このNSViewには、クリック可能なNSBoxの3つのサブビューが含まれています(mouseDownイベントを実装)。不思議なことに、アプリケーションを実行し、「再生」ボタンを押した直後にstatusItemを入力すると、NSBoxを1回クリックする必要があります(これにより、clickCount = 1が返されます)。別のウィンドウまたはビューに入ってstatusItemに戻り、NSBoxの1つをクリックしようとすると、何も起こりません。アイテムをダブルクリックすると、アクションが発生し、clickCountも1になります。
-(void)mouseDown:(NSEvent *)theEvent {
NSLog(@"ClickCount: %ld", theEvent.clickCount);
if ([delegate respondsToSelector:@selector(boxClicked:)]) {
[delegate boxClicked:self];
}
}
なぜこれが起こっているのか、そしてどうすればこれを解決できるのか、誰かが知っていますか?
編集(完全なmファイルコード):
#import "ClickableBox.h"
@implementation ClickableBox
@synthesize delegate;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
{
return YES;
}
- (void)viewDidMoveToWindow {
[self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:NO];
}
-(void)mouseEntered:(NSEvent *)theEvent {
if ([delegate respondsToSelector:@selector(boxRolledOver:)]) {
[delegate boxRolledOver:self];
}
}
-(void)mouseExited:(NSEvent *)theEvent {
if ([delegate respondsToSelector:@selector(boxExited:)]) {
[delegate boxExited:self];
}
}
-(void)mouseDown:(NSEvent *)theEvent {
NSLog(@"ClickCount: %ld", theEvent.clickCount);
if ([delegate respondsToSelector:@selector(boxClicked:)]) {
[delegate boxClicked:self];
}
}
- (void)dealloc {
[delegate release];
[super dealloc];
}
@end