StoryboardにNibファイルを読み込む
お題
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が表示されるわけではない。
SwiftにObjective-Cのコードをimportする
解説
SwiftからObjective-Cのライブラリを利用するにはヘッダーファイルを1つ用意し、そこに利用したいライブラリをimportする。それだけでSwiftのコード側には一切import文を記述することなく利用できるようになる。
手順
- フレームワークを追加
- ヘッダーファイルを作成
- Build Settingを編集
- ヘッダーファイルを編集
- 注意ポイント
1. フレームワークを追加
省略
2. ヘッダーファイルを作成
File > New > File > (iOS or OS X) > Source > Header File. を選択 名前はBridging-Header.hなどとする。
3. Build Settingを編集
Defines Module
Packaging > Defines Module > Yesに設定
Objective-C Bridging Header
Swift Compiler - Code Generation > Objective-C Bridging Hader > Bridging-Header.h に設定
4. ヘッダーファイルを編集
#ifndef SampleApp_Building_Header_h #define SampleApp_Building_Header_h #import <FacebookSDK/FacebookSDK.h> #endif
5. 注意ポイント
Objective-C Bridging Haderをプロジェクトの欄に記述してしまうと
XCode6.2ではビルドエラーになる。
FacebookSDK/FacebookSDK.h file not found
Targetsの方に記述する必要がある。
参考
Using Swift with Cocoa and Objective-C: Swift and Objective-C in the Same Project