当我的自定义NSTextFIEld处于“文本编辑模式”并且字段编辑器已作为firstResponder放在它前面时,我不再通过NSTextFIEld.keyDown(…)获得击键.我知道现在通过字段编辑器路由击键.大多数在线建议是在自定义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(通知:NSNotification)来产生按键吗?
>在使用控件(_:textVIEw:doCommandBySelector :)委托方法时,如何捕获没有标准键绑定的按键.特别是,我想截取没有映射到任何标准选择器的组合键“shift enter”. (隐含问题:您是否只能映射到NSResponder中的标准键 *** 作方法?)
我正在向主机NSTextFIEld添加委托.当fIEldEditor是firstResponder时,这不会被调用,这是我所关注的.这也不是上述场景的重要代表.
似乎有用的是使NSTextFIEld符合NSTextVIEwDelegate协议并专门覆盖该方法:
func textVIEw(textVIEw: NSTextVIEw,shouldChangeTextInRange affectedCharRange: NSRange,replacementString: String) -> Bool
陷阱各种按键.
textDIDChange中的通知(通知:NSNotification)在此方案中不可用,因为它是在按键后报告的.
总结以上是内存溢出为你收集整理的cocoa – 如何拦截NSTextField的字段编辑器中的击键?全部内容,希望文章能够帮你解决cocoa – 如何拦截NSTextField的字段编辑器中的击键?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)