因此,我试图将两个闭包传递给创建子视图的函数。将闭包作为参数并调用它们的函数的主要部分如下:
///goButton and cancelButton are class level variables
var goButton = UIButton(type: .system)
var cancelButton = UIButton(type: .system)
func addSubViewWithAction(_ titleString:String, _ button1Text:String, _ button2Text:String, closureYes:@escaping ()->(), closureNo:@escaping ()->()) {
goButton.actionHandle(controlEvents: UIControlEvents.touchUpInside,
ForAction:closureYes)
cancelButton.actionHandle(controlEvents: UIControlEvents.touchUpInside,
ForAction:closureNo)
}
这就是我要如何称呼它。
addSubViewWithAction("Hide Penguin here?","Yes","Cancel", closureYes: switchPlayers, closureNo: deletePenquin)
问题在于它同时为两个按钮调用deletePenguin函数,而从不调用switchPlayers函数。
这是我通过子视图向主视图添加按钮的方式
//v here is a UIView object
//Add all buttons and text to subView
v.addSubview(titleField)
v.addSubview(goButton)
v.addSubview(cancelButton)
v.layer.cornerRadius = 8
//Add subView to main view
window.addSubview(v)
答案 0 :(得分:0)
问题是actionHandle
以某种方式静态工作,因此它将用最新的作业覆盖以前的所有作业。
您可以执行以下操作(此处没有完整的代码解决方案,只有伪代码):
addTarget(_:action:for:)
如果您想支持不同的UIControlEvent
,则必须稍微改善这些步骤,也许是使用将事件映射到闭包的字典。