ストーリーボード内の複数のビューコントローラ全体でビューを使用したいと考えています。そのため、変更がすべてのビューコントローラに反映されるように、外部 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
、クラス名をカスタム クラス名に設定するだけです。