お題
Storyboardをメインで使用しているが、一部のViewを再利用したい。またはStoryboard上では編集が困難なので管理を別にしてしまいたい。
対応
Storyboard上にカスタムViewを配備し、そのカスタムViewにNibファイルから読み込んだViewをaddSubViewする。
- Xibファイルを生成する (例:MyView.xib)
- UIViewを継承したクラスを作る(MyView.swift)
- MyView.xibのFile's OwnerにMyViewを指定する
- MyViewクラスにinit:coderメソッドを定義する
- init:coderメソッドでNSBundle:loadNibNamed()でNibファイルをロードする
- ロードしたNibファイルをaddSubViewする
- StoryBoardにViewを追加し、custom classを作成したカスタムViewにする
//MyView.swift class MyView: UIView { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) let headerView = NSBundle.mainBundle().loadNibNamed("MyView", owner: self, options: nil)[0] as UIView; self.addSubview(headerView) } }
補足
- UITableViewのヘッダー、フッターのビュー設定などにも使える
- StoryBoard上にXibで定義したUIが表示されるわけではない。