Swift 3 osx button.addTarget

时间:2016-12-16 13:23:58

标签: macos button swift3

xcode 8 swift 3 for OSX

我有代码在myView中创建按钮。我想为它创建的每个按钮添加一个动作。我相信你通常会使用button.addTarget,但这对OSX没有任何想法吗?

感谢

import Cocoa

class MainWindowController: NSWindowController {

    var buttonArray: Array<NSButton> = []
    var buttonTitleArray: [String] = ["Answer1","Answer2","Answer3","Answer4"]
    @IBOutlet weak var myView: NSView!

    override func windowDidLoad() {
        super.windowDidLoad()

        var horizontalx = 50

        //Create button Array and tag buttons
        for i in 0..<buttonTitleArray.count{
            let button = NSButton(frame: NSRect(x: horizontalx, y: 50, width: 100, height: 50))
            button.tag = i
            buttonArray.insert(button, at: i)
            horizontalx = horizontalx + 100
        }

        //Adds Buttons to myView
        for i in 0..<buttonTitleArray.count{
            let button:NSButton = buttonArray[i]
            button.title = buttonTitleArray[i]
            myView.addSubview(button)
        }

        //Just for testing we can find tag
        for i in 0..<buttonTitleArray.count{
            let buttonFromArray = buttonArray[i]
            let tag = buttonFromArray.tag
            if (tag == 2){
                print("found Tag")
            }
        }

    }//EO Overide


}//EnD oF thE wORld

2 个答案:

答案 0 :(得分:2)

在你的一个循环中:

button.action = #selector(buttonPressed)

然后:

func buttonPressed(button:NSButton) {
    print("Clicked \(button.title)!")
}

答案 1 :(得分:2)

我正在努力解决这个问题,主要是使用静态方法,所以我认为我会在(迟到)中加入并加入jlew的答案。

如果设置import json json.dumps({"c": 0, "b": 0, "a": 0}) ,请务必设置button.action,尤其是在保留button.target的情况下。请记住,nil不仅仅是“函数指针”,而是通过对象(目标)的Objective-C方法引用。 Apple的Objective-C Target-Action页面对此非常有帮助。

假设您要设置“关闭”按钮。这很容易......

#selector

...但现在说你想在结束之前先拦截那个电话。您可以通过执行以下操作来捎带现有的窗口对象:

button = NSButton(title: "Exit", target: nil, action: #selector(window?.close))

同样,上面当然是 button = NSButton() button.title = "Exit" button.action = #selector(window?.buttonPressed) } } extension NSWindow { func buttonPressed() { Swift.print("Clicked Exit button!") close() } } target。否则,请将nil分配给包含按钮处理程序的button.target对象。