Ячейка 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:), Другое решение: пусть табличное представление обрабатывает щелчок и использует выбранную строку. У делегата есть несколько методов обнаружения изменений в выборе.

После теста я обнаружил, что он запускается щелчком в области столбца. Как сказано в его параметре, "щелкнул ли столбец таблицы", а не строку таблицы.

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