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

时间:2014-05-18 03:13:39

标签: objective-c cocoa nsview nsevent

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

以下示例仍会在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即可显示ViewA
  • 用户双击NSView以显示ViewB

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

1 个答案:

答案 0 :(得分:4)

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

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

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