【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を定義し、プロパティ更新時に自身の見た目に反映されるようにdidSetlayer.cornerRadiusプロパティに格納されるようにしておきます。

おすすめ記事:【Swift】プロパティオブザーバとは?willSetとdidSetの使い方

class CustomView: UIView {
    @IBInspectable  var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }
}

クラスが定義できたらStoryboardファイルから適当なViewControllerにUIViewを追加し、インスペクションからCustomViewを選択します。わかりやすく背景はグレーにしておきました。

【Swift/UIKit】@IBDesignableと@IBInspectableの使い方!Interface Builderからの編集

すると右から3個目の場所から@IBInspectableセットしたパラメータがいじれるようになります。もしうまく反映されない場合は一度Xcodeを閉じて再度立ち上げてみてください。

【Swift/UIKit】@IBDesignableと@IBInspectableの使い方!Interface Builderからの編集

ですがこの値を変更してもビルドすれば変化が確認できますが、IBに表示されているUIからでは確認できません。それを可能にするのが@IBDesignableです。

@IBDesignableとは?

@IBDesignable@IBInspectable同様にインターフェースをInterface Builder(Storyboardファイル形式)で構築する際に使用できるアノテーションの1つです。このアノテーションをクラスにマークすることでそのクラスのUIの変化をIBのUIにも反映させることができます。

使い方

では先ほどのCustomViewクラスを少し拡張してborderColorborderWidthを追加しておきます。またクラス定義の上に@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を見てみると設定できるパラメータにborderColorborderWidthが追加され、変化させると表示されているUIもリアルタイムに変化していくことがわかります。

【Swift/UIKit】@IBDesignableと@IBInspectableの使い方!Interface Builderからの編集

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.

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index