swift - SwiftUI 和 macOS 按住 Option 键单击按钮
问题描述
嗨,我如何检测用户何时单击按钮?
Button("Example") {
if optionKeyDown {
// A
} else {
// B
}
}
我正在使用 SwiftUI 应用程序生命周期。
解决方案
我不知道纯 SwiftUI 的做法,但 macOS 应用程序的 SwiftUI 仍然需要努力才能真正获得 Mac 用户期望的 UI 体验。
但是,您可以使用CoreGraphics.CGEventSource
来实现您想要的:
import CoreGraphics
extension CGKeyCode
{
static let kVK_Option : CGKeyCode = 0x3A
static let kVK_RightOption: CGKeyCode = 0x3D
var isPressed: Bool {
CGEventSource.keyState(.combinedSessionState, key: self)
}
static var optionKeyPressed: Bool {
return Self.kVK_Option.isPressed || Self.kVK_RightOption.isPressed
}
}
扩展中的特定键代码名称并不是特别 Swifty,因此如果您愿意,可以重命名它们。这些特定的名称可以追溯到 Classic MacOS Toolbox,并在早期 OS X 的 Carbon 事件管理器中使用。由于历史原因,我倾向于保留它们。我用所有旧的关键代码创建了一个github gist 。
有了这个扩展,使用它就很简单了。您的代码段变为
Button("Example") {
if CGKeyCode.optionKeyPressed {
// A
} else {
// B
}
}
推荐阅读
- java - 如何重新注册zookeeper手表
- python - 公共类属性实际上有什么用?
- spring - Spring Boot 在使用 requestMatchers() 时也会忽略 logout() 配置
- typescript - Svelte + Typescript = 如何使错误消失?
- javascript - 将javascript新日期值转换为可读字符串
- html - Beautiful Soup 特定的 td 标签?
- excel - Powershell脚本将excel中的过滤数据复制到另一个工作表
- django - django form.as_p 似乎没有理由不再渲染
- ios - 快速滑动时保持 TabBar 大标题
- git - 如何全局禁用 git ident 处理?