【问题标题】:How to catch an Alt + Up arrow event in NSTextView如何在 NSTextView 中捕获 Alt + 向上箭头事件
【发布时间】:2017-05-01 09:32:14
【问题描述】:

我在我的 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 和大写锁定时的事件值?

【问题讨论】:

    标签: swift nstextview


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常适合 Ctrl + Up。 Alt + Up 会有类似的解决方案吗?
    【解决方案2】:

    基于@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
    }
    

    【讨论】:

      【解决方案3】:

      另一种方式:覆盖moveToBeginningOfParagraph:

      【讨论】:

        猜你喜欢
        • 2011-03-28
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多