重新加载相邻的NSTableView时,NSTextField失去了焦点

时间:2018-09-28 21:12:23

标签: cocoa nstableview nstextfield appkit nsresponder

我有一个名为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()之后,搜索字段将失去焦点。

如何保持焦点在我的搜索字段中,而又不让表格重新加载劫持焦点?

1 个答案:

答案 0 :(得分:0)

U……事实证明,我永远无法让NSTableView失去焦点,因为它没有设置为允许 Empty 选择状态。在Interface Builder中选中一个框将其修复。

NSTableView - Empty