介绍
当我的自定义NSTextField
处于“文本编辑模式”并且field editor
已经放置在它前面时,因为firstResponder
我不再通过NSTextField.keyDown(...)
. 我了解击键现在正在通过field editor
. 大多数在线建议是在 custom 的委托中覆盖以下方法NSTextField
:
control(_:textView:doCommandBySelector:)
我确实覆盖了这个方法,但它似乎没有被调用?请参见下面的代码:
class FocusDelegate: NSObject, NSTextFieldDelegate{
func control(control: NSControl, textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool {
println("FocusDelegate")
if commandSelector == Selector("cancelOperation:"){
println("cancelOperation")
control.abortEditing()
return true
}
return false
}
}
我唯一要做的另一件事是将我的自定义委托设置NSTextField
为上述类的实例。我也尝试将上面的方法直接放入自定义NSTextField
类中——它不会导致任何错误,但也不会被调用。
问题
- 在让代表打电话上班时,我在上面遗漏了什么?
- 除了创建我自己的自定义字段编辑器之外,这是唯一的方法吗?可以
textDidChange(notification: NSNotification)
不被询问以产生按下的键吗? - 在使用
control(_:textView:doCommandBySelector:)
委托方法时,我如何捕获没有标准键绑定的键的按下。特别是,我想截取不映射到任何标准选择器的组合键“shift+enter”。(隐含的问题:你只能映射到 NSResponder 中的标准键操作方法吗?)