NSTextField теряет фокус при перезагрузке соседнего NSTableView

У меня есть поле поиска (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 ответ

Тьфу... оказывается, я никогда не мог получить NSTableView отпустить фокус, потому что он не был установлен, чтобы разрешить пустое состояние выбора. Флажок в Интерфейсном Разработчике исправил это.

NSTableView - Пусто

Другие вопросы по тегам