NSEvent clickCount игнорировать метод одиночного щелчка, если происходит двойной щелчок


Можно ли игнорировать первый щелчок, если обнаружен двойной щелчок?

Следующий пример все еще будет регистрировать one click даже перед two clicks. Я хочу игнорировать одиночный щелчок, если есть событие двойного щелчка.

- (void)mouseUp:(NSEvent *)theEvent {

    if (theEvent.clickCount > 1) {
        NSLog(@"two clicks %ld", theEvent.clickCount);
    } else {
        NSLog(@"one click %ld", theEvent.clickCount);
    }
} 

Цель этого-когда пользователь одним щелчком мыши в NSView я хочу выполнить метод, который делает другой вид или окно, чтобы появиться. Однако, если пользователь дважды щелкает внутри NSView , то я хочу, чтобы появился другой вид или окно. То следующие шаги описывают этот рабочий процесс:

  • пользователь одним щелчком мыши NSView вызывает вид
  • пользователь дважды щелкает NSView, чтобы отобразить ViewB

Проблема, с которой я сталкиваюсь, заключается в том, что один клик всегда обнаруживается, поэтому ViewA всегда будет появляться. Но я не хочу хорошо казаться, если есть двойной клик, Я просто хочу, чтобы ViewB появляются, когда происходит двойной щелчок.

1 2

1 ответ:

Если вы не можете вернуться назад во времени, вам нужно будет как-то отменить предыдущее событие с одним касанием.

  1. Самый простой способ: задержите выполнение события single tap и отмените его, если обнаружен двойной щелчок.

    [self performSelector:@selector(singleTap) withObject:nil afterDelay:[NSEvent doubleClickInterval]];
    
    /// cancel out
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap) object:nil];
    
  2. Кроме того, вы можете немедленно выполнить одно касание и написать код, чтобы отменить его, если обнаружен двойной щелчок. Это тоже должно быть очень просто. Потому что, если это трудно, может быть что-то не так с вашим дизайном UX.