如何将键事件发送到没有焦点在swift中的NSTextField

时间:2015-02-01 08:49:59

标签: cocoa swift nstextfield

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

这是我拥有的keyDown函数,我想将theEvent发送到switch语句的默认处理程序中的text字段。

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
    }
}

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

1 个答案:

答案 0 :(得分:1)

据我所知,-keyDown:被发送到firstResponder,在这种情况下是表格视图。

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

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