Mac 上的 Cocoa 中区分单击和双击

2023-12-21

我有一个习惯NSView(这是其中之一,他们都住在一个NSCollectionView— 我认为这不相关,但谁知道呢)。当我单击视图时,我希望它更改其选择状态(并相应地重新绘制自身);当我双击视图时,我希望它为刚刚双击的对象弹出一个更大的预览窗口。

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

- (void)mouseUp: (NSEvent *)theEvent {
    if ([theEvent clickCount] == 1) [model setIsSelected: ![model isSelected]];
    else if ([theEvent clickCount] == 2) if ([model hasBeenDownloaded]) [mainWindowController showPreviewWindowForPicture:model];
}

这大部分工作得很好。除了,当我双击视图时,选择状态会发生变化and窗口弹出。这不正是我想要的。

看来我有两个选择。我可以在响应双击时恢复选择状态(撤消错误的单击),或者我可以欺骗某种NSTimer解决方案是在响应单击之前建立延迟。换句话说,我可以确保在更改选择状态之前不会发生第二次单击。

这看起来更优雅,所以这是我一开始采取的方法。我从谷歌找到的唯一真正的指导是在一个名称中带有连字符的未命名网站上。这种方法大多有效,但有一个很大的警告。

悬而未决的问题是“我应该多长时间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)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac 上的 Cocoa 中区分单击和双击 的相关文章

  • 在 macOS 中获取用户首选的温度设置

    我正在尝试读取温度单位 摄氏度 华氏度 的用户设置系统首选项 我试图使用 NSLocale 获取此数据 但我找不到任何温度设置的证据 甚至可以读取这些数据吗 Thanks 官方 API 记录在首选项 实用程序 https developer
  • 为什么这段代码不能产生正确的输出? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 给定一个字符串和一个数字 该函数将从
  • 从沙箱中的帮助应用程序读取 NSUserDefaults

    我找到了一些阅读资源NSUserDefaults另一个应用程序的 Objective C NSUserDefaults 缓存会阻止其他应用程序准确读取更改 https stackoverflow com questions 10667848
  • 以编程方式检索 OSX 网络/代理配置值

    考虑到我的应用程序具有当前登录的管理员用户的用户 ID 和密码 是否可以从 OSX 网络设置中检索配置值 对 高级 代理 选项卡内容特别感兴趣 通过设置 API 完成 以下是从 OSX 网络设置中获取 PAC URL 字符串的示例 stat
  • 如何设置 NSButton OSX 的背景颜色

    我想设置 NSButton 的背景颜色 属性检查器中没有任何内容 所以我想知道是否有任何方法可以以编程方式完成此操作 系统控件需要遵循 Apple 的外观和感觉 因此您无法轻松更改背景颜色 如果你想完成这个 你需要子类化 NSButton
  • 如何使用 NSWorkspace launchApplicationAtURL?

    我尝试使用以下命令运行 TextMate foo txt 的等效项在 URL 处启动应用程序 二进制文件的名称是 TextMate 我有一个参数 我尝试了以下代码 但它似乎不起作用 find the textmate NSURL bURL
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 如何构建 Objective-C 静态库? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些 Objective C 类 目前在 Cocoa 应用程序 Mac OS X 和 Cocoa Touch 应用程序 iOS 中
  • 如何在 Cocoa with Core Data 中上传和存储文件?

    我有一个应用程序 我希望能够将文件上传到其中 我可以想象序列化数据 将其放入数组中 然后序列化数组并将其放入核心数据中 但这似乎不太正确 我还可以想象将文件复制到应用程序的支持文件中 获取这些文件的 NSURL 并存储数组或 NSURL 无
  • 如何使用NSDecimalNumber?

    我正在构建一个需要对金钱进行计算的应用程序 我想知道如何正确使用 NSDecimalNumber 特别是如何从整数 浮点数和双精度数初始化它 我只发现它很容易使用 decimalNumberWithString 方法 这 initWith
  • Swift NSViewController 响应 mouseDown 事件,但不响应 keyDown 事件

    我正在尝试使用 Swift 和 Cocoa 创建一个适用于 OS X 的应用程序 我希望应用程序能够响应关键事件 而不将焦点放在文本字段上 中 我在 Xcode 中创建了一个带有故事板的新 Cocoa 项目 并将 ViewControlle
  • activeProcessorCount 和processorCount 之间有什么区别?

    The NSProcessInfo类有两个名为processorCount and activeProcessorCount 该文档对于处理核心和活动处理核心之间的区别尽可能没有帮助 或者 换句话说 什么才算是一个inactive可可的处理
  • 可可:NSView原点x在底部

    我正在以编程方式创建一个NSWindow以及其上的控件 看来原点 0 0 位于左下角 这对我来说很奇怪 来自其他 GUI 工具包 是否有一些标志 以便我可以更改它 使原点位于左上角 在 OS X 上 原点位于左下角 对于屏幕坐标和视图框架来
  • Cocoa 卸载驱动器但不弹出它

    你知道要卸载驱动器吗without将其弹出 NSWorkspace有一些卸载驱动器的方法 但它也会弹出它们 任何想法 我按如下方式执行此操作 它会卸载驱动器但不会弹出它 其实我想弹出磁盘 只能卸载磁盘 P 请分享如何弹出磁盘 DASessi
  • 你使用什么样的类别方法来使Cocoa编程变得更容易?

    我使用 Cocoa 内置类的一系列类别方法来让我的生活更轻松 我将发布一些示例 但我真的很想看看其他编码人员想出了什么 有哪些方便的分类方法you using 示例 1 implementation NSColor MyCategories
  • 以编程方式设置 Mac 鼠标/触控板速度

    我正在尝试更改我正在开发的应用程序的鼠标跟踪速度 注意 不是加速 我到处寻找一种方法来做到这一点 但找不到任何东西 我怀疑这与我在 IOKit hidsystem 框架上的这个函数中给出的值有关 IOHIDSetAccelerationWi
  • Objective-C 2.0中的多线程问题

    我有我的主应用程序委托 其中包含一个返回对象的方法 该应用程序委托在主线程上运行 我还有一个在不同线程上运行的 NSOperation 除了希望有时能够在主线程上调用我的应用程序委托方法之外 我还需要从 NSOperation 线程中调用它
  • 对 NSTextField 设置限制

    我需要为文本字段设置字符限制 我跟着这个answer https stackoverflow com a 830019 913571我能够设定一个限制 但现在当我按下回车键时 所有字符都被清除了 什么地方出了错 BOOL isPartial
  • NSTextview:如何获取插入点的字形矩形?自定义文本视图?

    我似乎找不到任何有关如何获取插入点的矩形的文档 我试图在文本插入点 插入点正下方显示一个视图 如自动完成 我正在考虑制作一个自定义文本视图 但如果我可以避免它 那对我的情况来说将是理想的 谢谢 NSRect rectForActiveRan
  • NSView 的 Autosizing 属性设置丢失

    我今天遇到了这个非常令人沮丧的问题 我想将我的视图设置为自动调整大小 如下所示 但我在 NSView 的 xcode 设置中找到的所有内容都是这样的 这两个屏幕截图取自具有相同 xcode 4 3 2 的两个不同项目 这是一个错误还是我错过

随机推荐

  • 如何修复 Visual Studio 中的 LNK1104 错误?

    首先 请允许我向您介绍一些背景知识 我正在尝试模仿我童年的游戏 在这方面已经做了很多工作模拟上述游戏 https github com VanaDev Vana 并且我通过 Windows 设置指南取得了一些不错的进展 可以找到here h
  • 有APL的开源实现吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我应该“始终”同步对多个线程使用的所有双字段/属性/变量的访问吗?

    注意我倾向于编写无锁代码 因此我会尽可能避免任何类型的锁 相反 我只是使用while true 循环 因为我有很多CPU能力 据那http msdn microsoft com en us library aa691278 28VS 71
  • 在 SQL Server 2014 Developer 中生成 20 亿行的有效方法

    长话短说 我正在测试一个通过网络连接从表中清除条目的系统 预计该功能最多可处理超过 20 亿个条目 我需要对此进行压力测试才能确定 这是我的测试脚本 最多可以在十分钟内生成 980 万个 DECLARE I INT 0 WHILE I lt
  • moment.js 24 小时格式

    如何以 24 小时格式而不是 12 小时格式显示时间 我正在使用 moment js 我很确定这些线条可能与此有关 meridiem function hours minutes isLower if hours gt 11 return
  • MASM 中的 _emit 相当于什么

    我正在尝试将 Visual Studio 中编写的一些内联汇编代码移植到 MASM64 中 原始代码使用 emit 这是一条伪指令 在当前文本段的当前位置定义一个字节 我如何在 x64 汇编 MASM 中执行相同的操作 你可以只使用db a
  • 如何在 MVC 应用程序中缓存数据

    我已经阅读了大量有关 MVC 应用程序中页面缓存和部分页面缓存的信息 但是 我想知道您如何缓存数据 在我的场景中 我将使用 LINQ to Entities 实体框架 在第一次调用 GetNames 或任何方法 时 我想从数据库中获取数据
  • SQL 伪随机文本生成器

    我正在对 SQL 存储过程进行一些性能测试 只想使用一个快速数据生成器进行测试 我正在寻找一种简单的方法来生成伪随机 在这种情况下不需要真正的随机 varchar 字段 到目前为止 我的想法是对可以使用的有效字符进行字符定义 然后根据该定义
  • 将活动发送到后台后如何重新获得对活动的访问权限

    使用 Espresso 我尝试测试使用 Home 按钮将 Activity 发送到后台 然后再次将其放在前台进行一些检查 EspressoTest public void test onSomeView check matches isDi
  • Laravel - 禁止您无权访问此服务器上的 /

    我的 laravel 安装昨天工作正常 但今天出现以下错误 Forbidden You don t have permission to access on this server Additionally a 403 Forbidden
  • 如何在 Delphi XE2 中向 Mac OS Finder 添加菜单项

    我正在开发针对 Mac OS 和 Windows 的 Delphi XE2 应用程序 我想集成到上下文菜单中 对于 Windows 这是一个简单的任务 但对于 Mac 操作系统我不知道该怎么做 我读了提供服务 http developer
  • 谷歌地图在真实的 Android 设备上是空白的 - 但可以在模拟器上使用

    Hola 我正在尝试让地图工作 它似乎在 Nexus 6 模拟器上运行良好 但是当我在 Moto G 或 Samsung Galaxy 上运行它时 地图完全是银行的 它只在底角包含 google 徽标 我已经生成了一个谷歌地图密钥并将其放入
  • 如何使共享操作图标变为白色而不是灰色

    我的应用程序有ShareAction图标如下所示 我如何让它变成白色而不是灰色 看起来现在已经禁用了 我的 XML 是 menu menu
  • 更改 JTable 中行的背景颜色

    我有一个包含 3 列的 JTable 我已经设置了TableCellRenderer对于所有这样的 3 列 也许不是很有效 for int i 0 i lt 3 i myJTable getColumnModel getColumn i s
  • 查找连接我的设备的串行端口

    我开始使用密码键盘工作 我需要我的程序找到密码键盘连接的端口 而无需用户交互 我尝试过 Dim searcher As New ManagementObjectSearcher root cimv2 SELECT FROM Win32 Se
  • MySQL 中的条件更新

    我在尝试着UPDATE表中的值 但我需要添加一些条件 我找到了这个功能CASE 但如果这是最好的方法 我不是 这是一个例子 我的表是 关系 userid1 userid2 name1 name2 我得到了例如 SELECT FROM rel
  • javax.imageio.ImageIO 在灰度图像上读取不正确的 RGB 值

    我有一个图像 将其命名为grayscale jpg 现在 我在 The Gimp 中打开该图像并将颜色模式更改为 RGB 并将其另存为 color jpg 如果我在任何图像查看器中查看grayscale jpg和color jpg 它们看起
  • css 我如何从检查器中找到css文件

    我必须搜索确切的 css 文件 其中对规则进行了更改 但我不记得该规则在哪里 如何从检查器中找到css文件 选择器附近有一个 CSS 文件名 primary unified 例如
  • 在c99中有没有办法让复合文字具有可变长度?

    我知道可以通过正常声明数组来获得在运行时确定长度的数组 char buf len 我知道我可以将数组声明为复合文字并将其分配给中途的指针 char buf buf char 5 0 但是 将两者结合起来不起作用 标准不允许 我的问题是 有什
  • Mac 上的 Cocoa 中区分单击和双击

    我有一个习惯NSView 这是其中之一 他们都住在一个NSCollectionView 我认为这不相关 但谁知道呢 当我单击视图时 我希望它更改其选择状态 并相应地重新绘制自身 当我双击视图时 我希望它为刚刚双击的对象弹出一个更大的预览窗口