NSSearchField 文本更改时如何重新加载 NSTableView 数据
How to reload NSTableView data when NSSearchField text changes
我对如何在 searchField 的文本更改时重新加载 NSTableView 的数据感到有点困惑。我假设我需要过滤 tableView 用于根据字符串匹配和 controlTextDidChange()
内部的调用 tableView.reloadData()
填充自身的数组,但是当我测试代码时它不起作用。我假设这将是一个非常简单的修复,而且我发现的关于该主题的大部分信息都有些复杂。所以我不知道解决方案到底有多简单或复杂
这是我的 controlTextDidChange()
功能:
func controlTextDidChange(_ obj: Notification) {
noteRecords.filter { [=10=].title.contains(searchField.stringValue) }
tableView.reloadData()
}
如果有人可以解释如何在 searchField 的文本更改时使用过滤数组重新加载 tableViews 数据,我们将不胜感激。另外,如果用普通的 NSTextField 替换 searchField 更容易,请告诉我。
编辑
这是填充 tableView 的函数:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let note = allRecords[row]
let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "NoteInCloudCell")
if tableColumn == tableView.tableColumns[0] {
let cell = tableView.makeView(withIdentifier: cellIdentifier, owner: nil) as? NoteInCloudCell
cell?.noteTitle.stringValue = note.title
cell?.cloudID.stringValue = note.cloudID
return cell
}
else { return nil }
}
创建与 noteRecords
类型相同的第二个数组并将其命名为 allRecords
将完整的记录集分配给allRecords
并使用noteRecords
作为数据源数组
将controlTextDidChange
替换为
func controlTextDidChange(_ obj: Notification) {
let query = searchField.stringValue
if query.isEmpty {
noteRecords = allRecords
} else {
noteRecords = allRecords.filter { [=10=].title.localizedCaseInsensitiveContains(query)
}
tableView.reloadData()
}
一种更复杂的方法是可区分数据源。
我对如何在 searchField 的文本更改时重新加载 NSTableView 的数据感到有点困惑。我假设我需要过滤 tableView 用于根据字符串匹配和 controlTextDidChange()
内部的调用 tableView.reloadData()
填充自身的数组,但是当我测试代码时它不起作用。我假设这将是一个非常简单的修复,而且我发现的关于该主题的大部分信息都有些复杂。所以我不知道解决方案到底有多简单或复杂
这是我的 controlTextDidChange()
功能:
func controlTextDidChange(_ obj: Notification) {
noteRecords.filter { [=10=].title.contains(searchField.stringValue) }
tableView.reloadData()
}
如果有人可以解释如何在 searchField 的文本更改时使用过滤数组重新加载 tableViews 数据,我们将不胜感激。另外,如果用普通的 NSTextField 替换 searchField 更容易,请告诉我。
编辑
这是填充 tableView 的函数:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let note = allRecords[row]
let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "NoteInCloudCell")
if tableColumn == tableView.tableColumns[0] {
let cell = tableView.makeView(withIdentifier: cellIdentifier, owner: nil) as? NoteInCloudCell
cell?.noteTitle.stringValue = note.title
cell?.cloudID.stringValue = note.cloudID
return cell
}
else { return nil }
}
创建与 noteRecords
类型相同的第二个数组并将其命名为 allRecords
将完整的记录集分配给allRecords
并使用noteRecords
作为数据源数组
将controlTextDidChange
替换为
func controlTextDidChange(_ obj: Notification) {
let query = searchField.stringValue
if query.isEmpty {
noteRecords = allRecords
} else {
noteRecords = allRecords.filter { [=10=].title.localizedCaseInsensitiveContains(query)
}
tableView.reloadData()
}
一种更复杂的方法是可区分数据源。