我的第一个看起来像这样:
- (voID)mouseUp: (NSEvent *)theEvent { if ([theEvent clickCount] == 1) [model setIsSelected: ![model isSelected]]; else if ([theEvent clickCount] == 2) if ([model hasBeenDownloaded]) [mainWindowController showPrevIEwWindowForPicture:model];}
主要工作正常。除了当我双击视图时,选择状态会更改,d出窗口。这不是我想要的。
看来我有两个选择。我可以在回复双击时还原选择状态(撤消错误的单击),或者我可以在某些NSTimer解决方案之前构建一个延迟,然后再响应单击。换句话说,我可以确保在更改选择状态之前不会再次点击。
这似乎更优雅,所以这是我开始采取的方法。我从Google发现的唯一真正的指导是在一个没有名字的网站上以连字符命名。这种方法主要用于一个大的警告。
突出的问题是“我的NSTimer需要等多久?”未命名的站点建议使用Carbon函数GetDblTime()。除了在64位应用程序中无法使用,我可以找到的唯一文档说,它正在返回时钟。而且我不知道如何将它们转换成NSTimer的秒数。
那么这里的“正确”答案是什么呢?感觉GetDblTime()?双击“撤消”选择?我无法想出可可惯习的方法。
解决方法 延迟选择状态的变化是(从我所看到的)推荐的做法。实现起来很简单:
- (voID)mouseUp:(NSEvent *)theEvent{ if([theEvent clickCount] == 1) { [model performSelector:@selector(toggleSelectedState) afterDelay:[NSEvent doubleClickInterval]]; } else if([theEvent clickCount] == 2) { if([model hasBeenDownloaded]) { [NSRunLoop cancelPrevIoUsPerformRequestsWithTarget: model]; [mainWindowController showPrevIEwWindowForPicture:model]; } }}
(请注意,在10.6中,双击间隔可作为NSEvent上的类方法访问)
总结以上是内存溢出为你收集整理的在Mac上点击Cocoa中的一次点击全部内容,希望文章能够帮你解决在Mac上点击Cocoa中的一次点击所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)