objective-c - NSEvent clickCount 如果发生双击则忽略单击方法

标签 objective-c cocoa nsview nsevent

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

即使在两次点击之前,以下示例仍会记录一次点击。如果有双击事件,我想忽略单击。

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

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

这样做的目的是,当用户在 NSView 中单击时,我想执行一个方法来显示另一个 View 或窗口。但是,如果用户在 NSView 内部双击,那么我希望出现不同的 View 或窗口。以下步骤概述了此工作流程:

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

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

最佳答案

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

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

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

关于objective-c - NSEvent clickCount 如果发生双击则忽略单击方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718206/

相关文章:

ios - 如何在应用重新运行时从 ViewController 保存数据并将其加载到 TableViewController?

iphone - iPhone:App运行时,iPod控件呈灰色显示

MacOSX/ cocoa : how to change the desktop content view/how to draw directly on the desktop background?

objective-c - 迁移实体和父实体

swift - 无法以编程方式将字典数组中的行添加到 NSTable

IOS - UICollectionView - 通过 segue 将数据传递给 subview

objective-c - Cocoa中不按按钮触发回调

cocoa - 阻止 NSView 实例接收鼠标事件

objective-c - 更改 NSView 的背景颜色的最佳方法

Swift:使用 Interface Builder 创建可重现的 NSView