当我的自定义NSTextField
处于“文本编辑模式”且field editor
已放在firstResponder
前面时,我不再通过NSTextField.keyDown(...)
获得击键。我知道现在通过field editor
路由击键。大多数在线建议都是在自定义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:)
委托方法时,如何捕获按 NOT 的键具有标准键绑定。特别是,我想截取没有映射到任何标准选择器的组合键“shift + enter”。 (隐含问题:您是否只能映射到NSResponder中的标准键操作方法?)答案 0 :(得分:3)
我相信我已经在NSTextField
其代表及其现场编辑及其代表的工作方面取得了更大的明确性。是的,每个人都有自己的委托,NSTextField
会自动设置为fieldEditor
的委托。
我正在向主持人NSTextField
添加委托。当fieldEditor
为firstResponder
时,这将 NOT 被调用,这是我所关注的。这也不是上述场景的重要代表。
似乎有用的是使NSTextField
符合NSTextViewDelegate
协议并明确覆盖该方法:
func textView(textView: NSTextView, shouldChangeTextInRange affectedCharRange: NSRange, replacementString: String) -> Bool
捕获各种按键。
textDidChange(notification: NSNotification)
中的通知在此方案中无用,因为它是 AFTER 按键报告。