【Swift/UIKit】@IBDesignableと@IBInspectableの使い方!Interface BuilderからのUI編集
この記事からわかること
- Swift/UIKitの@IBInspectableと@IBDesignableとは?
- 実装方法
- Interface BuilderからUIを操作する方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
参考文献:公式リファレンス:What are @IBDesignable and @IBInspectable in Swift?
SwiftのStoryboard使用時に役にたつ@IBInspectable
とはどのようなものなのかについてまとめていきます。
@IBInspectableとは?
Swiftの@IBInspectable
とはインターフェースをInterface Builder(Storyboardファイル形式)で構築する際に使用できるアノテーションです。このアノテーションをプロパティの前にマークすることでInterface Builder(IB)上から直接プロパティの値を変更できるようにすることができます。
実際のビルドにもIBから設定した値が反映されるので、簡単に見た目を変更することができるようになります。
使い方
では実際の使用方法を見てみます。まずはCustomView
クラスというUIView
クラスを継承したビューを定義します。そのプロパティとしてcornerRadius
を定義し、プロパティ更新時に自身の見た目に反映されるようにdidSet
でlayer.cornerRadius
プロパティに格納されるようにしておきます。
おすすめ記事:【Swift】プロパティオブザーバとは?willSetとdidSetの使い方
class CustomView: UIView {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
}
クラスが定義できたらStoryboardファイルから適当なViewControllerにUIView
を追加し、インスペクションからCustomView
を選択します。わかりやすく背景はグレーにしておきました。
すると右から3個目の場所から@IBInspectable
をセットしたパラメータがいじれるようになります。もしうまく反映されない場合は一度Xcodeを閉じて再度立ち上げてみてください。
ですがこの値を変更してもビルドすれば変化が確認できますが、IBに表示されているUIからでは確認できません。それを可能にするのが@IBDesignable
です。
@IBDesignableとは?
@IBDesignable
も@IBInspectable
同様にインターフェースをInterface Builder(Storyboardファイル形式)で構築する際に使用できるアノテーションの1つです。このアノテーションをクラスにマークすることでそのクラスのUIの変化をIBのUIにも反映させることができます。
使い方
では先ほどのCustomView
クラスを少し拡張してborderColor
とborderWidth
を追加しておきます。またクラス定義の上に@IBDesignable
をマークしておきます。
@IBDesignable
class CustomView: UIView {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
@IBInspectable var borderColor: UIColor = UIColor.clear {
didSet {
layer.borderColor = borderColor.cgColor
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
}
これで再度IBを見てみると設定できるパラメータにborderColor
とborderWidth
が追加され、変化させると表示されているUIもリアルタイムに変化していくことがわかります。
failed to render and update auto layout status for viewcontroller (byz-38-t0r): failed to launch designables agent because tool was shutting down. check the console for a more detailed description and please file a bug report at feedbackassistant.apple.com.
もし以下のようなエラーが出てうまく反映されない場合は、Xcodeを一度閉じてXcodeアプリ自体を一度終了させてから再度立ち上げるとうまくいきました。
failed to render and update auto layout status for viewcontroller (byz-38-t0r): failed to launch designables agent because tool was shutting down. check the console for a more detailed description and please file a bug report at feedbackassistant.apple.com.
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。