Почему моему кликабельному окну требуется двойной клик, чтобы количество кликов равнялось 1? - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть 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 ]

2 голосов
/ 23 ноября 2011

Звучит так, как будто вы также должны сделать это:

- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
{
  return YES;
}

, чтобы первые события щелчка мыши были приняты в вашем пользовательском NSView.

Могут быть и другие проблемы, но из фрагмента кода невозможно определить, как есть.

0 голосов
/ 28 ноября 2011

Это может быть потому, что ваше мнение не является ключевым.Вы можете установить делегата для вашего NSMenu и на -menuWillOpen: вы можете позвонить [boxView.window makeFirstResponder:boxView];, чтобы сделать его ключевым.

...