【发布时间】: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