ストーリーボードの外部 xib ファイルからビューを読み込む 質問する

ストーリーボードの外部 xib ファイルからビューを読み込む 質問する

ストーリーボード内の複数のビューコントローラ全体でビューを使用したいと考えています。そのため、変更がすべてのビューコントローラに反映されるように、外部 xib でビューを設計することを考えました。しかし、ストーリーボードで外部 xib からビューをロードするにはどうすればよいでしょうか。また、それは可能なのでしょうか。そうでない場合、上記の状況に適した他の代替手段はありますか。

ベストアンサー1

私の完全な例はここですが、以下に概要を述べさせていただきます。

レイアウト

同じ名前の .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、クラス名をカスタム クラス名に設定するだけです。

ここに画像の説明を入力してください

おすすめ記事