微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)在此方案中不可用,因为它是在按键后报告的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐