2016-11-21 16 views
0

У меня есть NSTextView, и я хочу показать параметры автозаполнения, используя NSTableView (например, автозаполнение Xcode). Проблема в том, что когда textView является первым ответчиком, tableView отображается как нефокусированное (это правда), но я хочу притвориться, что он также активен. Есть ли простой способ достичь этого (имея firstResponder textView и tableView с активным цветом выбора ячейки)?NSTableView претендует быть активным

ответ

0

Так что мне удалось решить проблему с большим количеством экспериментов. Вот мое решение:

установка NSTableView:

tableView.refusesFirstResponder = true 
tableView.selectionHighlightStyle = .none 

на NSTableCellView подкласса реализовать следующий код:

override func awakeFromNib() { 
    super.awakeFromNib() 

    registerNotifications() 
} 

deinit { 
    unregisterNotifications() 
} 

private func registerNotifications() { 
    NotificationCenter.default.addObserver(self, 
              selector: #selector(selectionIsChanging), 
              name: NSNotification.Name.NSTableViewSelectionIsChanging, 
              object: nil) 
} 

private func unregisterNotifications() { 
    NotificationCenter.default.removeObserver(self) 
} 

@objc private func selectionIsChanging() { 
    if let row = superview as? NSTableRowView, row.isSelected == true { 
     self.backgroundColor = NSColor.alternateSelectedControlColor 
    } else { 
     self.backgroundColor = NSColor.clear 
    } 
}