我有一个类似于国际象棋的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.
答案 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运行时将仅使用该参数调用您的方法。