Xibで書いたらViewControllerに紐付けできない!!どうしようと悩んでいて解決したのでメモります。
#ファイル構成
青いViewの読み込みしたいファイルがsampleHomeView.Swift
sampleHomeView.xib
ViewControllerのファイルがsampleViewController.swift
sampleView.Xib
です。
この4つファイルで説明します。
#解説
こちらを参考にXibをViewに読み込ませてみてください!
↓↓↓↓↓↓↓↓↓↓
Xibファイルで作ったUIをViewに読み込む方法
読み込ませたらsampleHomeView.xib
にUIButtonを置きましょう。
Buttonを置いたら、sampleHomeView.swift
に紐付けしていきます!注意⚠️Outletです。
その次にsampleViewController.xib
で紐付けをします!
TypeをUIViewではなく、読み込ませているsampleHomeView
に設定します。
XibファイルからViewControllerに引っ張って紐付けすることができないので違う方法で紐付けます!
sampleHomeViewと書くとプロパティーで先ほど紐付けしたボタンが
sampleViewControllerの中でsampleButtonが呼べるようになります。
for 今回はタップした時に呼ばれます。
@objc funcの中に処理を書きます。
Xibでやる場合はIBActionではないんですね〜!!
コードはこんな感じです。
import UIKit
class sampleViewController: UIViewController {
@IBOutlet weak var sampleHomeView: sampleHomeView!
@IBOutlet weak var sampleView: sampleHomeView!
override func viewDidLoad() {
super.viewDidLoad()
sampleHomeView.sampleButton.addTarget(self, action: #selector(sampleViewController.tapSampleButton(sender:)), for: .touchUpInside)
}
@objc func tapSampleButton(sender:Any) {
sampleView.backgroundColor = UIColor.red
}
}
ちなみにsampleHomeView.swift
のコードはこんな感じ
import UIKit
class sampleHomeView: UIView {
@IBOutlet weak var sampleButton: UIButton!
override init(frame: CGRect) {
super.init(frame: frame)
loadView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadView()
}
private func loadView() {
let className = String(describing: type(of: self))
let view: UIView = Bundle.main.loadNibNamed(className, owner: self, options: nil)?.first as? UIView ?? UIView()
view.frame = bounds
addSubview(view)
}
}
今回ではボタンを押すと背景色が赤になるというようになっています。
このようにXibファイルでButtonを使ってみました!!
以上、XibファイルのButtonを配置してActionさせる方法でした。