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
答案 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
对象。