UIKit で提供されている view component を組み合わせてカスタムビューを作成すれば、あらゆる場面で再利用可能になり開発効率があがります。
ここではカスタムビューコンポーネントの作成方法として xib を使用した方法と使用しない方法の二つを紹介します。
CustomizedView.swift
class CustomizedView: UIView {
private struct Const {
static let subviewFrame = CGRect(x: 10, y: 10, width: 300, height: 100)
static let labelFrame = CGRect(x: 10, y: 10, width: 220, height: 30)
}
// コードで初期化する場合
override init(frame: CGRect) {
super.init(frame: frame)
initializeView()
}
// xibを使用する場合
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
// xibを使用した場合に呼ばれる
override func awakeFromNib() {
super.awakeFromNib()
initializeView()
}
private func initializeView() {
let subview = UIView(frame: Const.subviewFrame)
subview.backgroundColor = .red
addSubview(subview)
let label = UILabel(frame: Const.labelFrame)
label.text = "hogehoge"
label.backgroundColor = .clear
subview.addSubview(label)
}
}
NSBundle UIKit Additions Reference
CustomizedView.swift
class CustomizedView: UIView {
class func view() -> CustomizedView {
return Bundle.main.loadNibNamed("CustomizedView", owner: nil, options: nil)?.last as! CustomizedView
}
// xibを使用した場合に呼ばれる
override func awakeFromNib() {
super.awakeFromNib()
}
}
ボタンアクションなどのひも付けも可能です。
CustomizedView.xib
class CustomizedView: UIView {
class func view() -> CustomizedView {
return Bundle.main.loadNibNamed("CustomizedView", owner: nil, options: nil)?.last as! CustomizedView
}
// xibを使用した場合に呼ばれる
override func awakeFromNib() {
super.awakeFromNib()
}
@IBAction func buttonTapped(_ sender: UIButton) {
print("tapped!")
}
}