LoginSignup
11
11

More than 5 years have passed since last update.

Storyboardにxib利用

Last updated at Posted at 2015-09-29

自分用メモ

xibで作成したカスタムViewをStoryboradに配置して利用する方法。

xibでデザインをしてFile's OwnerのCustom ClassのClassでClassを指定。
スクリーンショット 2015-09-30 6.46.48.png

そのままだとStoryboardで読み込んだ場合に、高さ300でうまく動作しなかった。
対策として、xibのSimulated MetricsのSizeを変更し、Storyboardでそのサイズを初期値指定する。

xibファイル設定
スクリーンショット 2015-09-30 6.47.16.png

Storyboard設定にてClassを指定
スクリーンショット 2015-09-30 6.48.49.png
Storyboard側の制約をxibファイルに合わせて指定
スクリーンショット 2015-09-30 6.49.28.png

最後にClass内のinitでxibをロード。

class VideoNavView: UIView {

    private var v: UIView?

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        v = NSBundle.mainBundle().loadNibNamed(
            "VideoNavView",
            owner: self,
            options: nil
        )[0] as? UIView
        self.addSubview(v!)
    }
}

これで一応思った通りに動作できました。
いい方法が他にあればご教授お願いします。

あと、xibファイルのViewを読み込み時に動的に設定する場合、サイズに関係ない場合はinitで指定、Viewの位置についてはdrawRectに指定すればOK。

UISliderのつまみの画像変更など。

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        v = NSBundle.mainBundle().loadNibNamed(
            "VideoNavView",
            owner: self,
            options: nil
        )[0] as? UIView
        self.addSubview(v!)

        /* Viewのカスタム */
        spdSdr.setThumbImage(
            UIImage(named: "spdSdrThum"),
            forState: UIControlState.Normal
        )
        spdSdr.setThumbImage(
            UIImage(named: "spdSdrThum"),
            forState: UIControlState.Highlighted
        )
        spdSdr.setThumbImage(
            UIImage(named: "spdSdrThum"),
            forState: UIControlState.Selected
        )
    }

Auto Layoutにてサイズ変更後のViewを基準にあるViewの位置を指定したい場合など。
この時基本のサイズや位置だけ指定しておけば、iPad等は相対的に勝手に位置などは修正されるので、iPadの場合にボタンサイズを2倍にする制約があっても個別処理は不要。

    override func drawRect(rect: CGRect) {
        super.drawRect(rect)

        /* スライダーの右端と左端にViewを配置 */
        var posStBtnR: CGRect = posStBtn.frame
        posStBtnR.x = posSdr.x - (posStBtnR.w * 0.5)
        posStBtnR.y = posSdr.y + (posSdr.h * 0.5)
        posStBtn.frame = posStBtnR

        var posSpBtnR: CGRect = posSpBtn.frame
        posSpBtnR.x = posSdr.x + posSdr.w - (posStBtnR.w * 0.5)
        posSpBtnR.y = posSdr.y + (posSdr.h * 0.5)
        posSpBtn.frame = posSpBtnR
    }
11
11
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
11
11