Swift:创建一个调用另一个类中的方法的按钮

时间:2015-04-10 10:57:23

标签: ios swift ios8

我想在名为" 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)
}

上面的代码在点击按钮时会产生错误,为什么?我该如何解决?

提前谢谢。

2 个答案:

答案 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)