如何在 NSTextView 中捕获 Alt + 向上箭头事件

How to catch an Alt + Up arrow event in NSTextView

我在 swift OS X 应用程序中使用 NSTextView。当用户按下 ctrl + 向上箭头时会发生一些事情。

我通过重写 NSTextView 的 onKeyDown 函数来做到这一点。

我的代码是这样的。

class MyTextView: NSTextView {
    override func keyDown(with event: NSEvent) {
        //NSLog(“event.keyCode=\(event.keyCode),modifierFlags=\(event.modifierFlags)”)
        // Do something on Alt + Up
        if event.keyCode == 126 && event.modifierFlags.rawValue == 11010336 {
        // Do something…
        }
}

这行得通,但是当大写锁定键打开时,它就停止工作了。 我猜是因为 event.modifierFlags.rawValue 不再等于 1010336.

我的问题是 - 是否有更优雅的方法来捕获 Alt + 向上箭头,同时指定 event.modifierFlags.rawValue == 11010336 和大写锁定打开时的事件值?

是的,还有更优雅的方式:

if event.keyCode == 126 && event.modifierFlags.contains(.control) {

if event.keyCode == 126 && event.modifierFlags.contains(.option) {

另一种方式:覆盖 moveToBeginningOfParagraph:.

基于@Willeke 的回答,我认为正确的做法是 link 为文本视图创建一个 NSTextView 委托,然后处理以下内容。

func textView(_ textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
{
  if commandSelector == #selector(textView.moveToBeginningOfParagraph(_:)) 
  {
    // Do something and tell the view you have handled it
    return true
  }

  return false // You haven't handled anything else
}