如何将事件从UIView公开到UIViewController

问题描述 投票:0回答:2

我有一个带有以下代码的UIView:

import UIKit


class ServiceAuthHeaderViewController: UIView {


    @IBOutlet var lblHeaderTitle: UILabel!
    @IBOutlet var btnAddService: UIButton!

    class func instanceFromNib() -> UIView {
        return UINib(nibName: "ServiceAuthHeaderView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! UIView
    }

    @IBAction func onAddService(sender: AnyObject) {
        // I want other UIViewControllers to know when this event ocurrs

    }
}

现在我有UIViewController,在其中创建UIView的实例:

  var headerView = ServiceAuthHeaderViewController.instanceFromNib()
        headerView. // here I want to attach the onAddService event.

我该怎么做?

swift swift2
2个回答
1
投票

除了@fiks所建议的委托和回调外,您还可以只使用add target。

步骤1:更改以下内容以返回ServiceAuthHeaderView而不是UIView,以便您可以访问其IBOutlet。我将其从ServiceAuthHeaderView重命名为ServiceAuthHeaderViewController,因为这是UIView的子类。

class func instanceFromNib() -> ServiceAuthHeaderView {
    return UINib(nibName: "ServiceAuthHeaderView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! ServiceAuthHeaderView
}

步骤2:在您的父类UIViewController中,在btnAddService中添加viewDidLoad目标>

class ServiceAuthViewController: UIViewController {

  override func viewDidLoad() {
      let headerView = ServiceAuthHeaderView.instanceFromNib()
      headerView.btnAddService.addTarget(self, action: #selector(ServiceAuthViewController.btnAddServicePressed(_:)), forControlEvents: .TouchUpInside)
  }
}

[第3步:

创建您在选择器中输入的目标动作,并在按下选择器中的按钮时执行所需的操作。
func btnAddServicePressed(button: UIButton) {
    print("Code for button pressed should be place here")
}

1
投票

有多种方法。

© www.soinside.com 2019 - 2024. All rights reserved.