Cocoa 如何将密钥事件发送到swift中没有焦点的NSTextField
我有一个包含NSTableView和NSTextField的视图。表视图具有焦点。我想使用文本字段作为表视图的过滤器。是否有任何方法可以将表视图捕获的按键事件发送到NSTextField 这是我的keyDown函数,我想将事件发送到switch语句的默认处理程序中的文本字段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 =
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控制函数中处理我想要的事件。