我有一个NSTextView字段过滤NSTable表作为输入中的用户类型.我已经成功实现了表过滤.
现在,我的目标是自动选择第一个结果(表中的第一行),并允许用户在键入搜索查询时使用箭头键在结果之间移动.在表格中的结果之间移动时,输入字段应保持聚焦.(这与Spotlight的工作方式类似).
这就是应用程序现在的样子:
这是我的ViewController:
import Cocoa
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate, NSTextFieldDelegate {
@IBOutlet weak var field: NSTextField!
@IBOutlet weak var table: NSTableView!
var projects: [Project] = []
override func viewDidLoad() {
super.viewDidLoad()
projects = Project.all()
field.delegate = self
table.dataSource = self
table.delegate = self
}
override func controlTextDidChange(_ obj: Notification) {
let query = (obj.object as! NSTextField).stringValue
projects = Project.all().filter { $0.title.contains(query) }
table.reloadData()
}
func numberOfRows(in tableView: NSTableView) -> Int {
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个macOS菜单栏应用程序,该应用程序将文本字段作为第一项。该文本字段将用作搜索栏,用于过滤将显示在其下方的其他项目。
它看起来应该与1password非常相似:

这是我设法做到的:

通过创建Status menu包含三个项目的菜单,并为菜单中的第一个项目创建自定义视图,我实现了这一点。
但是,这种方法似乎无法解决我的问题。当按下cmd + A在搜索领域,重点跳转到菜单中的下一个项目。这是的默认行为NSMenu。
所以,我的问题是:这是创建类似1Password的应用程序的正确方法还是有更好的方法?
我正在构建一个 MenuBar Swift Cocoa 应用程序,它显示用户的 github 存储库列表。单击其中一个后,它会打开一个新的浏览器窗口,其中包含 github.com 上的存储库。
我成功加载了存储库列表并将它们渲染到 NSMenuItem 对象。现在,我尝试在列表顶部添加一个搜索栏,并根据搜索短语重新呈现项目。
我的问题是:
NSMenuItem?.removeAllItems())并动态添加新项目吗?或者我应该有两个静态菜单?我问这个问题是因为当用户搜索和不搜索时布局(例如NSMenuItem)会有所不同。我正在使用 Swift 3 和 Xcode 8.3。谢谢!