Ячейка macOS NSTableView ничего не делает
У меня есть эта строка "func tableView(_ tableView: NSTableView, didClick tableColumn: NSTableColumn) {код здесь}"
Эта функция ничего не делает. Я хочу щелкнуть строку в табличном представлении и выполнить некоторые действия при ее нажатии. Но это ничего не делает. Строка отображается правильно, но действие отсутствует. Я добавил также "print(" Нажал ") в этой функции, но даже это не отображается в информации журнала"
Как еще я мог заставить это работать?
1 ответ
Использовать NSTableView.selectionDidChangeNotification
обнаружить выбор
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.didSelectRow(_:)), name: NSTableView.selectionDidChangeNotification, object: tableView)
}
@objc
func didSelectRow(_ noti: Notification){
guard let table = noti.object as? NSTableView else {
return
}
let row = table.selectedRow
print(row)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
Из документации tableView(_:didClick:)
Msgstr: "Сообщает делегату, что кнопка мыши была нажата в указанном столбце таблицы, но столбец не был перетащен." Этот метод не вызывается, когда вы щелкаете подряд. Если вы хотите отлавливать щелчки в табличном представлении, создайте подкласс табличного представления, представления строки или представления ячейки и переопределите mouseDown(with:)
, Другое решение: пусть табличное представление обрабатывает щелчок и использует выбранную строку. У делегата есть несколько методов обнаружения изменений в выборе.
После теста я обнаружил, что он запускается щелчком в области столбца. Как сказано в его параметре, "щелкнул ли столбец таблицы", а не строку таблицы.