Ячейка macOS NSTableView ничего не делает

У меня есть эта строка "func tableView (_ tableView: NSTableView, didClick tableColumn: NSTableColumn) {здесь код}"

Эта функция ничего не делает. Я хочу щелкнуть строку в представлении таблицы и выполнить какое-либо действие при щелчке по ней. Но ничего не делает. Строка отображается правильно, но действие отсутствует. Я также добавил в эту функцию "print (" Clicked "), но даже это не отображается в информации журнала"

Как еще я мог заставить это работать?


person Tamillarocks    schedule 16.09.2017    source источник


Ответы (3)


Из документации tableView(_:didClick:): «Сообщает делегату, что кнопка мыши была нажата в указанном столбце таблицы, но столбец не был перетащен.». Этот метод не вызывается, когда вы щелкаете подряд. Если вы хотите улавливать щелчки в табличном представлении, создайте подкласс табличного представления, представления строки или представления ячеек и переопределите mouseDown(with:). Другое решение: позвольте представлению таблицы обрабатывать щелчок и использовать выбранную строку. У делегата есть несколько методов для обнаружения изменений в выборе.

person Willeke    schedule 16.09.2017

Используйте 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)
    }
person black_pearl    schedule 02.03.2020

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

person Frank Cheng    schedule 19.10.2020