Swift MacOS按钮数组使用参数调用函数

时间:2018-01-07 18:05:03

标签: arrays swift nsbutton

我有一个类似于国际象棋的60场比赛的比赛场地。而不是在故事板中手动连接它们,我想用for ... in来做。 我的代码是这样的:

let feld = NSButton()
feld.frame = CGRect(x: 1300+30*h, y: 20, width: 22, height: 22)
feld.target = self
feld.action = #selector(ButtonTest)
self.view.addSubview(feld)
ButtonArray.append(feld)

这样的功能(我不明白为什么在功能之前需要@objc,但只有这样才有效。

@objc func ButtonTest() {
ButtonArray[2].isEnabled=false
}

代码工作正常。但是我想将一个参数传递给函数,这样我就可以在按下按钮时停用它,而不仅仅是像这个例子中那样[2]。 (我想在此函数中添加其他计算)。

我四处搜索,似乎无法传递参数。如果这是真的,我怎么能解决我的问题?

编辑: 很好的答案和解释,谢谢。我不好意思地问了这个问题:我不仅要停用按下按钮而且还要停用按钮 做这样的计算:

var score = 5+/NumberOfButtonPressed/

因此,如果按下第一个按钮,则var score = 6,如果按下第10个按钮,则得分= 15.

1 个答案:

答案 0 :(得分:2)

您需要@objc,否则,Swift编译器不会为该方法创建选择器。选择器是标识方法的Objective-C值,有必要通过Objective-C调用方法。 (Cocoa是用Objective-C编写的。)您可以使用#selector获取方法的选择器,如您所见。

在macOS上,通过Cocoa调用的操作需要0或1个附加参数。可选参数是" sender",它是触发操作的对象(您单击的按钮)。试试这个:

@objc
func ButtonTest(sender: NSButton?) {
    sender?.isEnabled = false
}

您不需要更改#selector()表达式。 Cocoa运行时将仅使用该参数调用您的方法。