【问题标题】:Detecting arrow/enter keys when editing NSTextField编辑 NSTextField 时检测箭头/输入键
【发布时间】:2017-12-06 21:05:56
【问题描述】:

我找不到解决此问题的最新内容。 如何在编辑 NSTextField 时监控诸如箭头键之类的操作?

根据我的查找: - NSControlTextEditingDelegate 函数未被调用(而且我不知道如何使用它们) - NSTextFieldDelegate 函数没有列出可以在这里工作的东西

【问题讨论】:

标签: cocoa nstextfield


【解决方案1】:

设置您的文本字段的委托:

textField.delegate = self

为协议添加以下继承:

class MyTextField : NSTextFieldDelegate, NSControlTextEditingDelegate { ...

并实现以下内容:

   func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
    if commandSelector == #selector(moveUp(_:)) {
        ...
    } else if commandSelector == #selector(moveDown(_:)) {
        ...
    } else if commandSelector == #selector(insertNewline(_:)) {
        ...
    }
    return true
}

这个链接Recognize if user has pressed arrow key while editing NSTextField swift有更深入的解释

【讨论】:

    【解决方案2】:

    keyDown doesn't seem to work with NSTextFields (it does for NSTextView),所以我所做的是子类NSTextFieldViewController 并添加这些方法:

    import Cocoa
    
    class MyTextField: NSTextField
    {    
        override func keyUp(with event: NSEvent) {
            print("MyTextField keyUp key is %ld", event.keyCode)
    
            super.keyUp(with: event)            
        }
    }
    
    class MyTextView: NSTextView
    {
        override func keyDown(with event: NSEvent) {
    
            print("MyTextView keyDown key is %ld", event.keyCode)
    
            super.keyDown(with: event)
        }    
    }
    
    class ViewController: NSViewController {
    
        override func keyUp(with event: NSEvent) {
            print("ViewController keyUp key is %ld", event.keyCode)
    
            super.keyUp(with: event)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多