如果发生双击,NSEvent clickCount 忽略单击方法

wig*_*ing 2 cocoa objective-c nsevent nsview

如果检测到双击,是否可以忽略第一次单击?

以下示例仍将one clicktwo clicks. 如果有双击事件,我想忽略单击。

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

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

这样做的目的是当用户单击“NSView我想要执行的方法”时,该方法使另一个视图或窗口出现。但是,如果用户在里面双击,NSView那么我想要一个不同的视图或窗口出现。以下步骤概述了此工作流程:

  • 用户单击NSView使 ViewA 出现
  • 用户双击NSView使 ViewB 出现

我遇到的问题是始终检测到单击,因此始终会出现 ViewA。但是我不想在双击时出现ViewA,我只想在双击时出现ViewB。

Bir*_*ird 5

除非,您可以回到过去,否则您需要以某种方式取消之前的单击事件。

  1. 最简单的方法:在单击事件上延迟执行,如果检测到双击则取消它。

    [self performSelector:@selector(singleTap) withObject:nil afterDelay:[NSEvent doubleClickInterval]];
    
    /// cancel out
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap) object:nil];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,您可以立即执行单击操作,并在检测到双击时编写代码将其取消。这也应该很容易。因为,如果这很难,你的用户体验设计可能有问题。

  • @Bird,您应该使用实际的双击间隔,而不是使用 0.3 秒的任意内部,您可以使用 `+[NSEvent doubleClickInterval]` 获得。 (3认同)