NSResponder似乎没有鼠标双击事件。有没有简单的方法来获得双击?在Cocoa OSX中捕捉双击
回答
mouseDown:
和mouseUp:
方法将NSEvent对象作为参数提供有关点击的信息,其中包括clickCount
。
一般应用程序会查看clickCount == 2 - [mouseUp:]以确定双击。
一个细化是跟踪鼠标点击 - [mouseDown:]的位置,并看到鼠标位置上的增量小(x和y均为5分或更少)。
NSEvent
产生的mouseDown:
和mouseUp:
有一个属性,称为clickCount
。检查是否有两个确定是否发生了双击。
样品实施:
- (void)mouseDown:(NSEvent *)event {
if (event.clickCount == 2) {
NSLog(@"Double click!");
}
}
只需将在你的NSResponder
(如NSView
)的子类。
如果你需要同时处理 - 单击和双击,你通常会做什么。很明显,如果最终结果是双击,你将不得不忽略单击。 – jayarjo 2015-08-05 12:35:04
@jayarjo - 如果事实证明双击是必要的,那么我不能想到任何单击单击操作都不应该完成的地方。在文本字段中,只需点击一下鼠标即可将光标置于特定位置。双击突出显示整个单词。所以在单击时移动光标是无害的。在RTS游戏(至少暴雪的)中,一次点击选择一个单位,而双击则选择该类型的所有单位。如果您想要双击完成与单击操作完全不同的操作,您可能需要重新考虑整个用户体验。 – ArtOfWarfare 2015-08-05 14:46:30
普通clickCount
解决方案的问题在于双击仅被视为两次单击。我的意思是你仍然得到单击。如果你想对这一点击做出不同的反应,你只需点击点击就能获得一些东西。以下是我已经结束了(斯威夫特):
private var _doubleClickTimer: NSTimer?
// a way to ignore first click when listening for double click
override func mouseDown(theEvent: NSEvent) {
if theEvent.clickCount > 1 {
_doubleClickTimer!.invalidate()
onDoubleClick(theEvent)
} else if theEvent.clickCount == 1 { // can be 0 - if delay was big between down and up
_doubleClickTimer = NSTimer.scheduledTimerWithTimeInterval(
0.3, // NSEvent.doubleClickInterval() - too long
target: self,
selector: "onDoubleClickTimeout:",
userInfo: theEvent,
repeats: false
)
}
}
func onDoubleClickTimeout(timer: NSTimer) {
onClick(timer.userInfo as! NSEvent)
}
func onClick(theEvent: NSEvent) {
println("single")
}
func onDoubleClick(theEvent: NSEvent) {
println("double")
}
就个人而言,我检查双击进入mouseUp事件功能:
- (void)mouseUp:(NSEvent *)theEvent
{
if ([theEvent clickCount] == 2)
{
CGPoint point = [theEvent locationInWindow];
NSLog(@"Double click on: %f, %f", point.x, point.y);
}
}
- 1. 很难捕获UIButton子类上的双击。 (时间延迟捕捉双击)
- 2. 双击Cocoa中的NSTableView行?
- 3. Mac OSX中视频捕捉的选择?
- 4. 击捕捉顺序
- 5. 在单词内部捕捉双引号
- 6. Android:如何捕捉文本上的全局双击事件?
- 7. @捕捉不捕捉
- 8. 我无法点击捕捉按钮捕捉虚拟机映像
- 9. Cocoa/Xcode - OSX retrocompatibility
- 10. 在Android中捕获双击图片
- 11. 在捕捉
- 12. Swift cocoa Osx application imageviews
- 13. Cocoa/OSX标签UI
- 14. 在ScreenSaver for Cocoa/OSX中播放QTMovie
- 15. 在TextArea中捕捉标签
- 16. 在Silverlight中捕捉f5?
- 17. 在VBScript中捕捉事件
- 18. 在Swift中捕捉道路
- 19. 在iframe中捕捉javascript:window.close()
- 20. 在Django/Python中捕捉gaierror?
- 21. 在uitableviewcell中捕捉uiimageviewe touch
- 22. 在C#中捕捉按键#
- 23. 在javascript中捕捉phonegap GapViewClient.onReceivedError
- 24. 从地图片段中捕获双击
- 25. Flowplayer,Javascript,捕捉点击事件?
- 26. 捕捉PDF超链接点击从iframe
- 27. 捕捉链接点击Asp.net MVC
- 28. 如何捕捉点击Flash播放器?
- 29. 捕捉嵌套按钮点击
- 30. TinyMCE捕捉点击按钮事件
恕我直言,这是最有用的答案,因为它也回答了隐是否对第二个mouseDown或第二个mouseUp作出反应的问题。当然,在某些情况下,偏离标准可能是有意义的。不幸的是,苹果自己并不完全遵循一个标准(查找器和邮件在上,日历在下)...... – fzwo 2014-05-06 10:34:54