Почему моему кликабельному окну требуется двойной клик, чтобы количество кликов равнялось 1?
У меня есть NSStatusItem, который имеет NSMenuItem, который содержит пользовательский NSView. этот NSView содержит 3 подпредставления NSBox, которые можно активировать (реализовано событие mouseDown). Странно, но когда я запускаю приложение и ввожу statusItem сразу после нажатия кнопки "Play", мне нужно щелкнуть NSBox только один раз (это возвращает clickCount = 1). Когда я вхожу в другое окно или представление и возвращаюсь к statusItem, и я пытаюсь щелкнуть один из NSBox, ничего не происходит. Когда я дважды щелкаю элементы, действия происходят, и 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
2 ответа
Это может быть потому, что ваше мнение не является ключевым. Вы можете установить делегата для вашего NSMenu и на -menuWillOpen:
ты можешь позвонить [boxView.window makeFirstResponder:boxView];
сделать это ключом.
Звучит так, будто вам также нужно сделать это:
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
{
return YES;
}
так что первые события щелчка мышью принимаются в вашем обычае NSView
,
Могут быть и другие проблемы, но они не могут быть понятны из фрагмента кода как есть.