У меня есть поле поиска (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()
.
Как сохранить фокус в поле поиска и не дать таблице перегрузить перехватфокус?