我想在名为" store"的类中创建按钮,当它被点击时,它会调用名为" storeSelected"的方法。在另一个名为ExploreViewController的类中。
//class store
//create button
button.addTarget(ExploreViewController(), action: "storeSelected:", forControlEvents: UIControlEvents.TouchUpInside)
//class ExploreViewController
@IBAction func storeSelected(sender: UIButton) {
self.performSegueWithIdentifier("pushProductDetail", sender: sender)
}
上面的代码在点击按钮时会产生错误,为什么?我该如何解决?
提前谢谢。
答案 0 :(得分:2)
您正在对ExploreViewController
的新实例执行操作,该实例将在调用该方法后立即取消分配。将您的ExploreViewController
存储在某处或使用现有实例。
示例代码:
Store
类,假设按钮已创建
protocol storeDelegate {
func storeSelected(sender:UIButton)
}
var delegate: storeDelegate // <-- conforms to the storeDelegate protocol
// somewhere in viewDidLoad?
button.addTarget(delegate, action: "storeSelected:", forControlEvents: UIControlEvents.TouchUpInside)
ExploreViewController
上课
class ExploreViewController: storeDelegate {
func storeSelected(sender: UIButton) {
self.performSegueWithIdentifier("pushProductDetail", sender: sender)
}
// somewhere in here where you create the Store class:
store.delegate = self
}
答案 1 :(得分:-1)
对于Swift 2.2它的工作原理谢谢@Schemetrical。
protocol storeDelegate {
func storeSelected(sender:UIButton)
}
var delegate: storeDelegate! // <-- conforms to the storeDelegate protocol
// somewhere in viewDidLoad?
button.addTarget(delegate as? AnyObject, action: "storeSelected:", forControlEvents: UIControlEvents.TouchUpInside)