我有一个NSTextField
名为 ( )的搜索字段searchField
,当您输入它时,它会刷新 a 中显示的数据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)
}
如果我同时注释掉 thereloadData()
和 the ,selectRowIndexes
则搜索字段的行为符合预期(我可以继续输入并将焦点保持在该字段中)。但是,如果包含这些方法中的一个或两个,则在我键入第一个字符并被refreshData()
调用后,搜索字段就会失去焦点。
我怎样才能在我的搜索字段中保持焦点,而不是让表格重新加载劫持焦点?