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

前端之家收集整理的这篇文章主要介绍了cocoa – 如何拦截NSTextField的字段编辑器中的击键?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
介绍

当我的自定义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及其代表的工作方面取得了更大的明确性.是的,每个人都有自己的委托,NSTextField会自动设置为fieldEditor的委托.

我正在向主机NSTextField添加委托.当fieldEditor是firstResponder时,这不会被调用,这是我所关注的.这也不是上述场景的重要代表.

似乎有用的是使NSTextField符合NSTextViewDelegate协议并专门覆盖该方法

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

陷阱各种按键.

textDidChange中的通知(通知:NSNotification)在此方案中不可用,因为它是在按键后报告的.

猜你在找的cocoa相关文章