我有一个带有以下代码的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.
我该怎么做?
除了@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")
}
有多种方法。