我有一个名为NSTextField
的搜索字段(searchField
),当您键入它时,它将刷新NSTableView
中显示的数据。问题在于,此刷新操作还会触发对表行的选择,并且将焦点移到NSTextField
之外。
用户在搜索字段中输入:
func controlTextDidChange(_ obj: Notification) {
if let field = obj.object as? NSTextField, field == searchField{
refreshData()
}
}
然后NSTableView
在这里重新加载:
func refreshData(){
//Process search term and filter data array
//...
//Restore previously selected row (if available)
let index = tableView.selectedRow
tableView.reloadData()
//Select the previously selected row
tableView.selectRowIndexes(NSIndexSet(index: index) as IndexSet, byExtendingSelection: false)
}
如果我同时注释掉reloadData()
和selectRowIndexes
,则搜索字段的行为将达到预期的效果(我可以继续输入,并将焦点集中在该字段中)。但是,如果同时包含这两种方法中的一种或两种,则在键入第一个字符并调用refreshData()
之后,搜索字段将失去焦点。
如何保持焦点在我的搜索字段中,而又不让表格重新加载劫持焦点?