在Mac上点击Cocoa中的一次点击

在Mac上点击Cocoa中的一次点击,第1张

概述我有一个定制的NSView(它是许多之一,他们都住在一个NSCollectionView – 我不认为这是相关的,但谁知道)。当我点击视图时,我希望它更改其选择状态(并相应地重绘);当我双击该视图时,我希望它d出一个更大的预览窗口为刚被双击的对象。 我的第一个看起来像这样: - (void)mouseUp: (NSEvent *)theEvent { if ([theEvent click 我有一个定制的NSVIEw(它是许多之一,他们都住在一个NSCollectionVIEw – 我不认为这是相关的,但谁知道)。当我点击视图时,我希望它更改其选择状态(并相应地重绘);当我双击该视图时,我希望它d出一个更大的预览窗口为刚被双击的对象。

我的第一个看起来像这样:

- (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中的一次点击所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1035540.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存