【发布时间】:2018-01-27 22:00:57
【问题描述】:
我有一个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 projects.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "FirstCell"), owner: nil) as? NSTableCellView {
cell.textField?.stringValue = projects[row].title
return cell
}
return nil
}
}
这是Project类
struct Project {
var title: String = ""
static func all() -> [Project] {
return [
Project(title: "first project"),
Project(title: "second project"),
Project(title: "third project"),
Project(title: "fourth project"),
];
}
}
谢谢
【问题讨论】:
-
问题是什么?如何选择一行,如何检测方向键,如何将方向键发送到表格视图或其他?
-
@Willeke 问题是如何实现“聚焦”TextField 和 Table。就像聚光灯一样。它允许您在搜索字段中输入字符,同时使用箭头从结果中进行选择。
标签: swift macos cocoa nstableview nstextfield