将回调绑定到NSButton

时间:2019-06-06 21:01:37

标签: swift macos nsviewcontroller

我想构建一个模态对话框窗口,其中包含许多NSView,在编译时不知道要显示多少个视图。我已经能够用视图填充窗口,但是有两个问题使我停滞不前。一种是在用户与这些视图交互时获取回调。另一篇文章将解决另一个问题。

我使用情节提要创建带有“确定”和“取消”按钮的窗口,然后在窗口的内容中添加新的标签,按钮和字段。

这是我的代码的重要组成部分:

class ParmViewController: NSViewController {

    static func showParmDialog()
    {
        let storyboard = NSStoryboard(name: "Main", bundle: nil)
        let windowController = storyboard.instantiateController(withIdentifier: "ParmViewController") as! NSWindowController
        let window = windowController.window!
        let viewController = window.contentViewController as! ParmViewController
        viewController.setup()
        let application = NSApplication.shared
        application.runModal(for: window)
        window.close()
    }

    var parmState = false

    func setup() {
        let button = NSButton()
        button.setButtonType( NSButton.ButtonType.switch )
        button.state = parmState
        button.frame = NSRect( x: 150, y: y, width: 100, height: 26 )
        view.addSubview( pView )
        button.action = #selector(parmButtonPushed(_:))
    }

    @objc func parmButtonPushed( _ sender: Any ) {
        Utils.trace( "parm button pushed" )
    }

    @IBAction func okButtonPushed(_ sender: Any) {
        parmstate = ( button.state == NSControl.StateValue.on )
        NSApplication.shared.stopModal()
     }

}

该按钮正常显示在窗口中,并且单击“确定”按钮后即可正确设置parmState。单击按钮时,我只是没有得到回调。我无法在网络上找到任何示例代码,所以我很确定#selector代码不正确。我如何获得该回调?

0 个答案:

没有答案