Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否表明已在Swift中处理密钥更新事件?_Swift_Macos_Cocoa_Nstextview - Fatal编程技术网

是否表明已在Swift中处理密钥更新事件?

是否表明已在Swift中处理密钥更新事件?,swift,macos,cocoa,nstextview,Swift,Macos,Cocoa,Nstextview,在NSTextView中,我试图使tab和shift tab在编辑文本时发挥作用,而不在文本中插入制表符。目前,我通过NSTextViewDelegate的keyUp方法检测按键: 我在文档中看不到如何向NSTextView指示我希望它忽略我已尝试回答的tab键的任何内容,但tab似乎不会触发此事件,也不会阻止事件在响应程序链中向上移动 我还尝试在keyUp方法的开头调用interpretakeyevents[event],并重写insertTab和insertBacktab。使用正确的按键可以

在NSTextView中,我试图使tab和shift tab在编辑文本时发挥作用,而不在文本中插入制表符。目前,我通过NSTextViewDelegate的keyUp方法检测按键:

我在文档中看不到如何向NSTextView指示我希望它忽略我已尝试回答的tab键的任何内容,但tab似乎不会触发此事件,也不会阻止事件在响应程序链中向上移动

我还尝试在keyUp方法的开头调用interpretakeyevents[event],并重写insertTab和insertBacktab。使用正确的按键可以成功地调用它们,但仍会在文本中插入一个选项卡。似乎建议应防止插入选项卡:

它[keyDown]可以通过调用NSResponder方法exportKeyEvents:,将事件传递给Cocoa的文本输入管理系统。输入管理系统根据所有相关键绑定词典中的条目检查按下的键,如果存在匹配项,则向视图发回doCommandBySelector:消息。否则,它会将insertText:消息发送回视图,视图将实现此方法来提取和显示文本。重点矿山


文档中提到,如果事件未得到处理,则事件将继续在响应者链上发生-这是如何表示的?使用keyUp而不是keyDown重要吗?

是的,重要的是您要覆盖keyUp:而不是keyDown:。向下键事件发生在向上键事件之前,NSTextView对向下键事件进行操作。当系统调用keyUp:override时,阻止默认处理key down事件为时已晚。

使用自定义子类。如果没有调用这些方法,则表示第一响应者是其他人,并且已经吃掉了您的事件。只要您的textview是第一个响应程序,就会调用您的keyDown方法

class MyTextView: NSTextView {

    override func insertTab(_ sender: Any?) {
        self.insertText("HELLO", replacementRange: NSMakeRange(0, 0))
        //OR ANY CUSTOM TEXT EDITING, ACTION TO CHANGE FIRST RESPONDER...
    }
    override func insertBacktab(_ sender: Any?) {
        self.insertText("AAAAA", replacementRange: NSMakeRange(0, 0))
        //OR ANY CUSTOM TEXT EDITING, ACTION TO CHANGE FIRST RESPONDER...
    }

}

教育:WWDC 2010 Cocoa应用程序中的关键事件处理。看起来我在使用keyDown时有更多的问题需要解决,但至少我知道我走的方向是正确的。我只是尝试使用自定义insertTab将NSTextView子类化,但没有插入任何选项卡。代理是否是处理此问题的正确位置?我觉得您误解了按键事件的响应链,按键的响应顺序以及发出嘟嘟声的时间。检查WWDC 2010中Cocoa应用程序中的WWDC密钥事件处理
class MyTextView: NSTextView {

    override func insertTab(_ sender: Any?) {
        self.insertText("HELLO", replacementRange: NSMakeRange(0, 0))
        //OR ANY CUSTOM TEXT EDITING, ACTION TO CHANGE FIRST RESPONDER...
    }
    override func insertBacktab(_ sender: Any?) {
        self.insertText("AAAAA", replacementRange: NSMakeRange(0, 0))
        //OR ANY CUSTOM TEXT EDITING, ACTION TO CHANGE FIRST RESPONDER...
    }

}