我有一个 NSStatusItem,它有一个包含自定义 NSView 的 NSMenuItem。这个 NSView 包含 3 个可点击的 NSBox 子视图(实现了 mouseDown 事件)。奇怪的是,当我运行应用程序并在按下“播放”按钮后立即输入 statusItem 时,我必须单击 NSBox 一次(这将返回 clickCount = 1)。当我进入另一个窗口或视图并返回 statusItem 并尝试单击其中一个 NSBoxes 时,没有任何反应。当我双击项目时,会发生操作,并且 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