【发布时间】:2015-02-01 08:49:58
【问题描述】:
我有一个包含 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
}
}
我希望不必强制用户将焦点更改为文本字段来过滤表格视图结果。
【问题讨论】:
-
文本字段不处理关键事件。当它们获得焦点时,一个单独的文本视图将添加到与文本字段重叠的窗口中。该文本视图,称为field editor,处理关键事件和其他事情(例如,编辑菜单项)。文本字段没有。因此,当文本字段没有焦点时,没有什么可以处理此类事件。 Mac UI 约定是使用单独的
NSSearchField并在表格中进行类型选择。 -
感谢您的解释。我决定将 NSTextField 作为 firstResponder 并使用 doCommandBySelector 在 NSTextFieldDelegate 控制函数中处理我想要的事件。
标签: cocoa swift nstextfield