为什么 doubleAction 仅在视图控制器 class 中处理时才起作用?

Why is doubleAction working only when it's handled in a view controller class?

我有一个视图控制器MyViewController:

class MyViewController: NSViewController {

    private let componentList = ComponentList()

    override func loadView() {
        componentList.createView(view)
        componentList.myTableView.doubleAction = #selector(doubleClickOnRow)
    }

    @objc func doubleClickOnRow() {
        print("some row clicked = \(componentList.myTableView.clickedRow)")
    }
}

这个双击操作没有问题。但是,当我尝试将此双击操作放入 ComponentList 时,它不起作用(未调用操作函数):

class ComponentList: NSObject, NSTableViewDelegate, NSTableViewDataSource {
    let myTableView = NSTableView()

    override func createView(view: NSView) {
        let scrollView = NSScrollView()
        view.addSubview(scrollView)
        scrollView.documentView = myTableView            
        // set up some constraints, ignore here...
        myTableView.delegate = self
        myTableView.dataSource = self

        myTableView.doubleAction = #selector(doubleClickOnRow)
    }

    @objc func doubleClickOnRow() {
        print("some row clicked = \(myTableView.clickedRow)")

        // never being called, why is that?
    }
}

为什么 ComponentList 中的双动作处理不起作用?我在这里遗漏了什么吗?

您需要同时设置 targetdoubleAction 才能使其与 ComponentList

一起使用
override func createView(view: NSView) {
    let scrollView = NSScrollView()
    view.addSubview(scrollView)
    scrollView.documentView = myTableView            
    // set up some constraints, ignore here...
    myTableView.delegate = self
    myTableView.dataSource = self

    myTableView.doubleAction = #selector(doubleClickOnRow)
    myTableView.target = self // self here is ComponentList
}