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
отпустить фокус, потому что он не был установлен, чтобы разрешить пустое состояние выбора. Флажок в Интерфейсном Разработчике исправил это.