1. ホーム
  2. ios

[解決済み] Storyboardで外部xibファイルからビューを読み込む

2022-04-28 13:29:50

質問

ストーリーボードで、複数のビューコントローラーを通してビューを使用したい。そこで、外部xibでビューを設計し、変更が各ビューコントローラに反映されるようにしようと考えました。しかし、ストーリーボードで外部xibからビューを読み込むことはどのようにできるのでしょうか、また、それは可能なのでしょうか?また、そのようなことは可能なのでしょうか?

解決方法は?

私の完全な例は次のとおりです。 こちら が、以下に概要を説明します。

レイアウト

プロジェクトに、同じ名前の .swift と .xib ファイルをそれぞれ追加します。.xibファイルには、カスタムのビューレイアウト(できれば自動レイアウト制約を使用)が含まれています。

swiftファイルをxibファイルのオーナーにする。

コード

.swift ファイルに以下のコードを追加し、.xib ファイルからアウトレットとアクションをフックします。

import UIKit
class ResuableCustomView: UIView {

    let nibName = "ReusableCustomView"
    var contentView: UIView?

    @IBOutlet weak var label: UILabel!
    @IBAction func buttonTap(_ sender: UIButton) {
        label.text = "Hi"
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        guard let view = loadViewFromNib() else { return }
        view.frame = self.bounds
        self.addSubview(view)
        contentView = view
    }

    func loadViewFromNib() -> UIView? {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: nibName, bundle: bundle)
        return nib.instantiate(withOwner: self, options: nil).first as? UIView
    }
}

使用する

カスタムビューは、ストーリーボードの任意の場所で使用できます。ストーリーボードに UIView で、クラス名をカスタムクラス名に設定します。