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

时间:2017-05-01 09:32:14

标签: swift 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以及大写锁定开启时的事件值?

3 个答案:

答案 0 :(得分:1)

是的,有一种更优雅的方式:

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

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

答案 1 :(得分:0)

另一种方式:覆盖moveToBeginningOfParagraph:

答案 2 :(得分:0)

以@Willeke的答案为基础,我认为正确的方法是为文本视图链接NSTextViewDelegate,然后处理以下问题。

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
}