0

我有一个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()调用后,搜索字段就会失去焦点。

我怎样才能在我的搜索字段中保持焦点,而不是让表格重新加载劫持焦点?

4

1 回答 1

0

呃......事实证明我永远无法NSTableView释放焦点,因为它没有设置为允许选择状态。在 Interface Builder 中选中一个框可以修复它。

NSTableView - 空

于 2018-09-28T22:12:58.170 回答