【问题标题】:Handling key events in OS X with Swift and Cocoa使用 Swift 和 Cocoa 处理 OS X 中的关键事件
【发布时间】:2016-04-13 04:36:16
【问题描述】:

我有一个非常基本的 OS X,它有几个不同的元素。

一个文本字段、一个表格视图和一个文件内容视图。

我有一个 ViewController。

我希望能够在我的 ViewController 中为情节提要中的每个元素截取特定的关键事件,并在不同元素之间更改焦点。

例如,如果光标当前位于文件内容视图中,并且我点击了 ESCAPE,我希望将焦点转移到文本字段。

或者,如果焦点当前在表格视图上并且我按 ENTER,则光标/焦点将移动到文件内容视图。

处理这个问题的最佳方法是什么?

我已经尝试在 ViewController 中覆盖 keyDown 方法,但是由于自动完成等事情的阻碍,我运气不佳。我在 keyDown 中添加了一个 print 语句来检查函数是否正在接收事件,但它并不总是被触发。

更新

除了我要拦截的特定键之外,我希望所有其他键事件都正常运行。例如,在文件内容视图或文本字段中键入。

【问题讨论】:

    标签: swift macos cocoa


    【解决方案1】:

    我强烈建议您观看 2010 年的 WWDC 谈话 #145,Key Event Handling in Cocoa Applications。它概述了事件传递机制,以及处理事件的几种方法:

    • 创建一个菜单项或按钮,其keyEquivalent 是转义键。

    • Override cancelOperation(_:)complete(_:),这是两个 NSResponder 方法,默认情况下可以在按下转义键时调用。 (回车键还有其他方法。)

    • 在 NSApplication 或 NSWindow 中覆盖 sendEvent(_:) 以拦截所有事件并绕过默认行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2011-01-18
      相关资源
      最近更新 更多