xibと対となるViewはレイアウトのみの定義で、イベント着火による振る舞いはViewControllerに書きたいことがある。
HogeView.xibとUIViewを継承したHogeView.swiftというファイルが定義されていたとすると、
HogeView.swift
class HogeView: UIView { @IBOutlet weak var actionButton: UIButton! class func instanceFromNib() -> UIView { return UINib(nibName: "HogeView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView } }
HogeViewControllerで、xibのviewに対してaddTargetすればよい。
class HogeViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let view = HogeView.instanceFromNib() as? HogeView view?.actionButton.addTarget(self, action: #selector(handleActionButton), for: .touchUpInside) ... } @objc func handleActionButton(sender: UIButton) { //doAction } }
リンク
リンク