Swift -以编程方式触发NSSearchField过滤



我正在为MacOS编写一个基于表格的应用程序(使用NSTableView)。

为了实现表过滤,我使用绑定.

在我的应用程序中,我有一个NSTableView,我绑定到一个NSArrayController,和一个NSSearchField,我绑定到同一个阵列控制器。这是我绑定这些对象的代码:
self.tableView.bind(.content, to: self.arrayController, withKeyPath: "arrangedObjects", options: nil)
let searchField = (Constants.appDelegate.SearchFieldVC.view as? NSSearchField)!  // grab searchField reference
searchField.bind(
.predicate,
to: self.arrayController,
withKeyPath: NSBindingName.filterPredicate.rawValue,
options: [.predicateFormat: "col CONTAINS[cd] $value"]
)

其中col是我想要搜索字段过滤的tableView列的名称。

一切都很好;当我在搜索字段中输入文本时,它会相应地过滤表格。当我尝试以编程方式时,问题出现了"inject"输入我的搜索框。
这是我使用的代码:

self.view.window?.makeFirstResponder(searchField) // move focus from tableView to searchField
searchField?.stringValue.append(someString)  // inject some text into searchField, expecting immediate table filtering
searchField?.currentEditor()?.moveToEndOfLine(self)

含义-我使我的搜索字段成为第一响应者(移动焦点)从表视图到搜索字段),然后将一些文本写入搜索字段的stringValue中。

当我运行应用程序时,我可以看到"焦点"。移动到我的searchField并将文本写入其中,但没有执行过滤。我必须手动按"进入";或者继续在searchField中输入,以使过滤器正确执行。

我如何以编程方式注入文本到我的搜索字段,并立即执行它的过滤功能?
谢谢!

绑定由动作触发。

searchField.sendAction(searchField.action, to: searchField.target)

searchField.actionsearchField.target可以是nil

相关内容

  • 没有找到相关文章

最新更新