【问题标题】:Receiving double-click event接收双击事件
【发布时间】:2011-08-19 23:00:44
【问题描述】:

我一直在搜索 Apple 文档,我能找到的唯一与双击有关的函数只是返回了可接受的两次点击之间的时间,以便将其视为双击。

谁能给我看一个双击事件的例子?

【问题讨论】:

  • @duskwuff OSX(见标签)
  • @duskwuff:另外,iOS 没有点击。
  • 对,我想知道您是否正在寻找(可能不存在?)iOS 上的“双击”事件。

标签: objective-c macos cocoa mouseevent nsevent


【解决方案1】:

覆盖NSResponder 方法-mouseUp: 并检查提供的事件clickCount。如果clickCount == 2,那么您正在查看双击。如果为 1,则单击一次。 0,然后他们在鼠标按下和鼠标抬起之间等待了足够长的时间,系统认为这不是点击,只是不同的向下然后向上事件。

- (void)mouseUp:(NSEvent *)event
{
    NSInteger clickCount = [event clickCount];
    if (2 == clickCount) [self handleDoubleClickEvent:event];
}

这假定处理点击的对象是响应者链的一部分。如果没有,您将不得不以另一种方式获取您的事件,例如继承 NSApplicationNSWindow 并覆盖 -sendEvent: 以在适当的事件被进一步传递之前拦截它。

【讨论】:

  • 需要强调的是,这个答案中的“NSResponder”是指Cocoa中的类(NSView、NSWindow和NSApplication继承自),而不是其他以它命名的应答者。
【解决方案2】:

参见 NSEvent 的 -clickCount 方法。

【讨论】:

    【解决方案3】:

    还请注意,某些NSControl 具有setDoubleAction:,以便将通过setDoubleAction: 注册的选择器发送到目标。查看官方文档

    【讨论】:

    • 事件(NSEvent对象)没有传递给目标;操作消息被发送到目标,但是,与通常的操作消息一样,单个参数是发送消息的控件(表格视图或其他)。我确定您不是指 NSEvent 对象,但我想确保清楚。
    • 是的,我就是这个意思;我会改写它。谢谢。
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多