Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What is going on with this article?
@ootake

StoryboardとXIBの使い分け

More than 5 years have passed since last update.

iOS開発において、Interface Builder(IB)を利用した開発を行う場合、StoryboardとXIBを使うことができます。
しかし、ルールを決めないで開発を進めるとコードの可読性が低くなります。

まず、Storyboard、XIB単体で使った場合の問題点をお知らせします。
Storyboardだけ利用した場合はすべてのUI部品が一つのStoryboard
に記述されるため、再利用が難しくなります。また、部品数が多くなると読み込みに時間がかかることが想定されます。
XIBだけ利用した場合は画面遷移の定義をすべてコードで記述することになります。

そこで、それぞれの長所を利用した使い分けかたをご紹介します。
まず、UIViewController(VC)クラスに対応するXIBファイルを作成し、
UIViewを配置します。XIBファイルのFile's Owner のCustom Classに
VCクラスを設定します。VCクラスのloadViewメソッドをオーバーライドして、Xibからビューを作成し、viewプロパティに設定します。

swift
    override func loadView() {
        let type = Mirror(reflecting: self).subjectType
        let className = String(type).componentsSeparatedByString(".")[0]
        let nib = UINib(nibName: className, bundle: nil)
        self.view = nib.instantiateWithOwner(self, options: nil).first as? UIView
    }

Storyboardでは配置したVCクラスのCustom ClassにVCクラスを設定するとStoryboard上でXibで作成したVCクラスを再利用することが可能になります。

*コードでxibからVCクラスのインスタンスを作成する場合は、UIKitのframeworkで用意されている、コンビニエンスメソッドを利用しても取得できます。

swift

let viewController = UIViewController(nibName: ":nibName", bundle: nil)

19
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ootake
アプリ開発者 【得意分野】 iOS(Swift,Objective-C) Unity(C#) 【資格】 情報処理技術者試験 応用情報技術者試験 (AP) ORACLE MASTER Gold 9i Database (OCP) 日商簿記検定1級

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
19
Help us understand the problem. What is going on with this article?