为什么doubleAction只有在视图控制器类中处理时才能工作?

时间:2017-10-23 04:15:20

标签: swift macos nstableview

我有一个视图控制器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中的双重操作处理不起作用?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:2)

您需要同时设置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
}