【问题标题】:Quick use of MASShortcut framework on Swift project在 Swift 项目中快速使用 MASShortcut 框架
【发布时间】:2016-04-26 01:12:51
【问题描述】:

我无法在 Swift OSX 项目中实现 MASShortcut (docs here) 以侦听全局热键。我已经设法通过 CocoaPods 导入框架,并且我有一个工作 MASShortcutView 实例:

@IBOutlet weak var testShortcutView:MASShortcutView!

我还想出了如何使用快捷方式监控和触发某些东西(请告诉我这是否正确):

let shortcut = MASShortcut(keyCode: keycode, modifierFlags: modifierkeys)

MASShortcutMonitor.sharedMonitor().registerShortcut(shortcut, withAction: callback)

这里的问题是,如何从我的 MASShortcutView 中获取 keyCode 和 modifierFlags?


我真的提前感谢你,我到处搜索,但找不到如何在 swift 上执行此操作的示例。我只能找到objective-c,我想不通。

【问题讨论】:

  • 至少我如何从中获取keycode和modifierFlags?请任何人,这是结束我的应用程序的最后一个细节..
  • 我的这篇博文可能会有所帮助:blog.rampatra.com/…

标签: xcode swift macos cocoa macos-carbon


【解决方案1】:

以下代码将为 Cmd+Shift+K 组合键注册快捷方式处理程序

let shortcut = MASShortcut.init(keyCode: UInt(kVK_ANSI_K), modifierFlags: UInt(NSEventModifierFlags.CommandKeyMask.rawValue + NSEventModifierFlags.ShiftKeyMask.rawValue))

MASShortcutMonitor.sharedMonitor().registerShortcut(shortcut, withAction: {
    print("Hello world")
})

Cmd 和 Shift - 修改键。您应该在 modifierFlags 参数中设置它们。 NSEventModifierFlags 枚举中提供了可能值的完整列表。

为方便起见,我已将示例项目放在 github 上:

https://github.com/melifaro-/ShortCutSwiftSample

处理快捷方式更改:

shortcutView.shortcutValueChange = { (sender) in

    let callback: (() -> Void)!

    if self.shortcutView.shortcutValue.keyCodeStringForKeyEquivalent == "k" {
        callback = {
            print("K shortcut handler")
        }
    } else {
        callback = {
            print("Default handler")
        }
    }

    MASShortcutMonitor.sharedMonitor().registerShortcut(self.shortcutView.shortcutValue, withAction: callback)
}

我已将更改推送到存储库中。我建议尝试以下场景:

使用快捷视图:

  1. 设置Cmd+Shift+K快捷键

  2. 设置Cmd+Shift+J快捷键

  3. 试试这个快捷方式 - 应该执行不同的回调

希望对你有帮助。

【讨论】:

  • 感谢您的回复!不幸的是,这不是问题,我知道如何创建硬编码的快捷方式。但我不明白如何使用 MASShortcutView 让用户设置自己的快捷方式。您可以将其添加到您的答案中吗?
  • @wavvves 好的,我会这样做的
  • 顺便说一句,很高兴有人花时间帮助我。 Swift 是向新手开放应用程序开发的一个很好的尝试,但它仍然缺乏翻译所有 Objective-c 示例的支持。应该鼓励开发人员更新他们的文档以包括快速支持。谢谢!
  • @wavvves 感谢您的反馈。我在这里的某个地方看到了一个框架创建者(zoul)。我们可以提供您的反馈。就整体情况而言,我相信 iOS/OS X 软件开发的主要部分将在 1-2 年内从 Obj-C 转移到 Swift。一旦发生这种情况,所有不断发展的框架都将获得对 Swift 的一流支持。所以这只是时间问题。此外,我渴望看到 Swift 3 发布后会发生什么。它会成为真正的跨平台吗?我很想有一天我可以用 Swift 为 iOS/OS X、特别是 Android 和 Linux 开发应用程序
  • 在尝试了这个之后我还有一件事困扰着我,当我更改它们时如何取消注册以前的快捷方式?当我设置一个新的时,前一个继续工作。
【解决方案2】:

在 Swift 5 中

let shortcut = MASShortcut(keyCode: kVK_ANSI_K, modifierFlags: [.command, .shift])

MASShortcutMonitor.shared()?.register(shortcut, withAction: {
    print("hello")
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多