LoginSignup
4
3

More than 1 year has passed since last update.

【Swift】@IBInspectableと@IBDesignable

Posted at

はじめに

今回はIBDesignableとIBInspectableについて解説してみたいと思います!

IBInspectable

これを使うとストーリーボードのInterfaceBuilderで設定できるようになります。
前回のプロジェクトを使って解説します。

このように、placeHolderに対して@IBInspectableを使います。

    @IBInspectable
    var placeHolder: String = "" {
        willSet {
            self.placeHolderLabel.text = newValue
            self.placeHolderLabel.sizeToFit()
        }
    }

すると、ストーリーボードのInterfaceBuilderで変更可能になります。

ScreenShot 2021-06-13 17.13.45.png

ScreenShot 2021-06-13 17.14.25.png

ScreenShot 2021-06-13 17.15.46.png

ただし、コードでplaceHolderを指定した場合はそちらが優先されます。

final class ViewController: UIViewController {

    @IBOutlet private weak var textView: PlaceTextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        textView.placeHolder = "カキクケコ"

    }

}

ScreenShot 2021-06-13 17.16.42.png

IBDesignable

IBInspectableを指定し、リアルタイムで見た目の変更をストーリーボードで見れるようにしてくれます。
つまり、ビルドしなくても確認できるようにするためのものです。

ストーリーボードで適当にUIViewを配置してください。

ScreenShot 2021-06-13 17.37.59.png

そして、ViewControllerで以下のように書いてみます。

final class DesignableView: UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }

}

先ほど配置したViewにこのDesignableViewを継承させます。

ScreenShot 2021-06-13 17.39.01.png

先ほどの@IBInspectableのおかげでストーリーボードから変更できるようになっているので、適当に値を変えます。

ScreenShot 2021-06-13 17.40.12.png

ただし、この時点では@IBDesignableをまだ使っていないのでリアルタイムでは変更されません。

ScreenShot 2021-06-13 17.41.01.png

@IBDesignableをつけてあげます。

@IBDesignable
final class DesignableView: UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }

}

すると、このようにリアルタイムで変更が見られるようになると思います!

ezgif.com-gif-maker (7).gif

おわりに

@IBInspectable@IBDesignableは便利ですね!積極的に使っていきたいです!

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3