Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Cocoa 如何将密钥事件发送到swift中没有焦点的NSTextField_Cocoa_Swift_Nstextfield - Fatal编程技术网

Cocoa 如何将密钥事件发送到swift中没有焦点的NSTextField

Cocoa 如何将密钥事件发送到swift中没有焦点的NSTextField,cocoa,swift,nstextfield,Cocoa,Swift,Nstextfield,我有一个包含NSTableView和NSTextField的视图。表视图具有焦点。我想使用文本字段作为表视图的过滤器。是否有任何方法可以将表视图捕获的按键事件发送到NSTextField 这是我的keyDown函数,我想将事件发送到switch语句的默认处理程序中的文本字段 override func keyDown(theEvent: NSEvent) { let s = theEvent.charactersIgnoringModifiers! let s1 =

我有一个包含NSTableView和NSTextField的视图。表视图具有焦点。我想使用文本字段作为表视图的过滤器。是否有任何方法可以将表视图捕获的按键事件发送到NSTextField

这是我的keyDown函数,我想将事件发送到switch语句的默认处理程序中的文本字段

override func keyDown(theEvent: NSEvent) {
    let s   =   theEvent.charactersIgnoringModifiers!
    let s1  =   s.unicodeScalars
    let s2  =   s1[s1.startIndex].value
    let s3  =   Int(s2)
    switch s3 {
        case NSUpArrowFunctionKey:
            self.previous()
            return
        case NSDownArrowFunctionKey:
            self.next()
            return
        default:
            // this appends the text to the textField, Is there a way to send theEvent to the textField?
            textField.stringValue = textField.stringValue + s;

            // textField.keyDown(theEvent) // this does not work
            break
    }
}

我不希望为了过滤表格视图结果而强制用户将焦点更改为文本字段。

据我所知,
-keyDown:
被发送到
第一响应者
,在这种情况下就是表格视图

我不喜欢这个想法,我会用另一种方式实现它,但您可以尝试将文本字段插入响应器链,并在表视图上方的位置插入。您必须对文本字段进行子类化并实现
mouseDown
以捕获事件,还必须更改表视图鼠标下移实现,以便它不会捕获文本字段的事件。这太复杂了


为什么不简单地设置文本字段的目标/操作并处理事件循环之外的用户输入?

文本字段不处理关键事件。当它们具有焦点时,一个单独的文本视图将添加到与文本字段重叠的窗口中。该文本视图(称为)处理关键事件和其他事项(例如编辑菜单项)。文本字段不存在。因此,当文本字段没有焦点时,就没有什么可以处理此类事件。Mac UI惯例是使用单独的
NSSearchField
和do类型在表中进行选择。感谢您的解释。我决定将NSTextField作为第一响应程序,并使用doCommandBySelector在NSTextFieldDelegate控制函数中处理我想要的事件。