【问题标题】:NSButton ignoring clicks that come in too close togetherNSButton 忽略过于靠近的点击
【发布时间】:2014-09-18 05:34:19
【问题描述】:

NSButton 正在忽略靠得太近的点击。

如果我慢慢点击,所有点击都会被确认,但如果我开始加快速度,它会在某个时刻停止发送 mouseDown: 事件。如果我再放慢速度,在某个时刻,所有点击都会再次开始传播。

对于这个应用程序中的几个按钮,会发生锤击,没有理由不应该允许。

我试过 setIgnoresMultiClick:,但它并没有改变行为。

我尝试继承 NSButton,覆盖 mouseDown:,重新创建事件对象的副本,但按钮计数设置为 1。

还是没有骰子。

有人知道这里的诀窍吗?

半解决(...虽然有缺点)。

可能有六种方法可以做到这一点,但这是我启用按钮锤击的方法...

@interface HammerClickWindow : NSWindow {;;}
@end

@implementation HammerClickWindow
- (void)sendEvent:(NSEvent *)event
{
    if ( event.type == NSLeftMouseDown )
    {
        [super sendEvent:[NSEvent mouseEventWithType:event.type location:event.locationInWindow modifierFlags:event.modifierFlags timestamp:event.timestamp windowNumber:event.windowNumber context:event.context eventNumber:event.eventNumber clickCount:1 pressure:event.pressure]];
    }
}
@end

如果有人知道如何做到这一点,它 (A) 不会影响窗口中 100% 的鼠标按下,并且 (B) 只能影响特定按钮...那就太好了。

【问题讨论】:

  • 由于 UI 在主线程上工作,线程将被阻塞,直到操作完成,所以在此期间它不会响应我猜的其他点击。
  • 嗯...你知道,这很有趣。我使用的按钮是连接到 IBAction 的简单 NSButton,但它们的行为是这样的。我刚刚在同一个项目的同一个窗口中添加了一个新的 vanilla NSButton,连接了它的 IBAction,果然,无论我点击多快,每次都会调用 IBAction 方法。那么为什么我的其他按钮会这样呢?他们有自定义图像,仅此而已。
  • 所以它似乎与在触发动作在动作中的按钮上调用 setHidden:YES 有关。有一个“+”按钮可以打开一个视图。视图的角落有一个“x”(关闭)按钮。这两个按钮直接相互重叠,因此在单击“+”并打开视图后,我隐藏了“+”按钮,当用户单击“x”按钮关闭视图时,“+”按钮再次被取消隐藏。我可能需要重新考虑 UI 的布局方式。我越描述它,我就越意识到它是不标准的。

标签: objective-c cocoa nsbutton


【解决方案1】:

您需要更改系统偏好设置-鼠标-双击速度-快速

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多