48
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift+xibで簡単レイアウトでカスタムビュー

Last updated at Posted at 2015-04-23

方法としては以下のリンクのように行います。
http://blogios.stack3.net/archives/1944

これをSwiftで行う方法が本エントリです。

手順は

  • xibでレイアウトを作る
  • swift側のinitでxibをaddsubviewする
    といった流れになります。

まずはNew File>iOS/User Interface>ViewからCustomView.xibを作り、適当にレイアウトします。

Screen Shot 0027-04-23 at 9.06.29 AM.png

次にCustomView.swiftを作り、以下のように編集します。

CustomView.swift


required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.customViewCommonInit()
    }
    
    func customViewCommonInit(){
        let view = NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil).first as! UIView
        view.frame = self.bounds
        view.setTranslatesAutoresizingMaskIntoConstraints(true)
        view.autoresizingMask = UIViewAutoresizing.FlexibleWidth|UIViewAutoresizing.FlexibleHeight
        self.addSubview(view)
    }

少し解説をいれると、init(coder aDecoder: NSCoder)はStoryboardからCustomViewが呼ばれる際に呼ばれるイニシャライザです。
ここでプレーンなUIviewを生成した後、customViewCommonInitメソッドでxibからロードしたviewを取得し、addsubviewします。

最後にxibに戻り、File's OwnerのCustom ClassをCustomViewに指定して終了。

StoryboardでUIViewを貼り付けて、Custom ClassをCustomViewに指定すればStoryboardからxibでレイアウト指定したカスタムビューを貼ることが出来ます。

コードから呼ぶ場合はinit()やinit(frame:frame)に同様の処理をしてください。

48
46
2

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
48
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?