5
3

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 3 years have passed since last update.

【Swift】iOS13でStoryBoardではなくXibから起動する

Last updated at Posted at 2020-03-09

なんでXib(Xcode Interface Builder)を使うの??

Xibとはアプリケーションの画面をレイアウトする時に使うやつです。
基本的な扱いはStoryBoardと似ています。

【Xibのメリット】
作った画面を複数の画面で再利用するのが簡単
画面の1部のパーツを作ることができる

【Xibのデメリット】
ファイル数が増えがち。。。
画面遷移の関係が可視化されない(コードで書くから)

今回やってみること

アプリ起動時の初期画面をXibで作った画面に設定する(iOS13で実現)
iOS13からは、SceneDelegateがテンプレートとして標準化されているのでiOS12以前のやり方と少しだけ違うみたいです。

実装の方法

では、早速作っていきます

ViewControllerとXibファイルを作成する

とりあえず、プロジェクトを作ります。そしたら、画像のようにプロジェクトのフォルダを選択してください。
create_project.png

この状態で、新規ファイルを作成します。
今回は、[CocoaTouchClass]を選択して次へ!
new_file.png

名前はなんでもいいんですけど、わかりやすいように[XibViewController]にしました。
それで、[UIViewControllerクラス]を継承します。
【重要】 最後に、[Also create XIB file]にチェックをつけてください
create_file.png

ファイルの作成が完了したら、こんな感じになると思います。
普通にファイルを作る時と異なるポイントは、.swiftと.xibの2つのファイルができることです。
この時に作成された、XibファイルをStoryBoardのように使っていきます。
created_file.png

Xibファイルを編集する

起動した時に、ちゃんとXibから起動しているか分かりやすいよう、こんな感じで編集しておきましょう。
Viewの作り方はStoryBoardと同じです。
setting.png

SceneDelegate.swiftを編集する

最後に、iOS13から標準装備されている、SceneDelegate.swiftにコードをちょこっとだけ書きます。
変更したところだけを抜き出すとこんな感じ。。。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)の中で、アプリ起動時に表示される画面を今回作ったXibファイルに対応するViewControllerに設定しています。

SceneDelegate.swift
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let _ = (scene as? UIWindowScene) else { return }
        // MARK: -変更点
        // ここから
        let window = UIWindow(windowScene: scene as! UIWindowScene)
        self.window = window
        window.makeKeyAndVisible()
        // ここのViewControllerの名前は、さっき作ったクラスファイル名
        let xibVC = XibViewController()
        window.rootViewController = xibVC
        // ここまで 
    }

起動してみる

こんな感じ
Main.storyboardではなく、Xibから起動されていることが確認できました。
comp.png

おわりに

今回は、Xibを最初の画面として起動する方法について書いてみました。
この方法を勉強しなきゃいけなかった時に、iOS13より前ののやり方で、実装したら上手くいかず、苦戦してしまったので、記事にしました。

5
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?