macOS NSTableView单元格不执行任何操作

时间:2017-09-16 05:52:20

标签: xcode macos nstableview nstableviewcell

我有这一行" func tableView(_ tableView:NSTableView,didClick tableColumn:NSTableColumn){code here}"

此功能不起作用。我想在表格视图中单击一行,并在单击它时执行一些操作。但它没有做任何事情。该行显示正确,但缺少操作。我在该功能中添加了" print(" Clicked"),但即使这样也没有显示在日志信息中#34;

我怎么能让这个工作?

3 个答案:

答案 0 :(得分:0)

来自tableView(_:didClick:)的文档:"告诉代理人在指定的表中单击了鼠标按钮,但未拖动该列。" 。单击一行时,不会调用此方法。如果要捕获tableview中的单击,请将表视图,行视图或单元视图子类化并覆盖mouseDown(with:)。 另一种解决方案:让表视图处理单击并使用所选行。代表有几种方法可以检测选择中的变化。

答案 1 :(得分:0)

使用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)
    }

答案 2 :(得分:0)

经过测试,我发现它是由单击列区域触发的。正如其参数所说,“单击表列是单击的,而不是表行。”