gpt4 book ai didi

cocoa - 如何从 NSTextField 的字段编辑器中拦截击键?

转载 作者:行者123 更新时间:2023-12-03 16:14:25 25 4
gpt4 key购买 nike

简介

当我的自定义 NSTextField 处于“文本编辑模式”并且 字段编辑器 已作为 firstResponder 放置在其前面时,我没有不再通过 NSTextField.keyDown(...) 获取击键。据我了解,击键现在通过字段编辑器进行路由。大多数在线建议是在自定义 NSTextField 的委托(delegate)中重写以下方法:

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 的委托(delegate)设置为上述类的实例。我还尝试将上面的方法直接放入自定义 NSTextField 类中 - 它不会导致任何错误,但也不会被调用。

问题

  1. 在让代表通话正常工作时,我在上面遗漏了什么?
  2. 除了创建自己的自定义字段编辑器之外,这是唯一的方法吗?能否不询问 textDidChange(notification: NSNotification) 来生成按下的按键?
  3. 在使用 control(_:textView:doCommandBySelector:) 委托(delegate)方法时,如何捕获不具有标准按键绑定(bind)的按键按下操作。特别是,我想拦截不映射到任何标准选择器的组合键“shift+enter”。 (隐含的问题:你只能映射到 NSResponder 中的标准按键操作方法吗?)

最佳答案

我相信我已经更清楚地了解了 NSTextField 其委托(delegate)、fieldEditor 及其委托(delegate)的工作原理。是的,每个都有自己的委托(delegate),NSTextField 会自动设置为 fieldEditor 的委托(delegate)。

我正在向主机 NSTextField 添加委托(delegate)。当 fieldEditorfirstResponder 时,这将不会被调用,这是我所关心的。这也不是上述场景的重要委托(delegate)。

看起来有用的是使 NSTextField 符合 NSTextViewDelegate 协议(protocol)并专门重写该方法:

 func textView(textView: NSTextView, shouldChangeTextInRange affectedCharRange: NSRange, replacementString: String) -> Bool

捕获各种按键。

textDidChange(notification: NSNotification) 中的通知在此场景中不起作用,因为它是在按键之后报告的。

关于cocoa - 如何从 NSTextField 的字段编辑器中拦截击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com