LoginSignup
23
23

More than 5 years have passed since last update.

1画面につき1StoryBoardファイルを実現する

Last updated at Posted at 2015-07-30

概要

Xcode6ですと、StoryBoardを使用するのが標準です。 現状(Xcode6.4)では、1つのStoryBoardファイルで全ての画面を管理します。 StoryBoardが1つですと、ソース管理でコンフリクトを起こしやすいですし、できれば1画面につき1StoryBoardファイルで開発したいところです。 そこで、この記事では1画面につき1StoryBoardファイルを実現する方法を提示します。

プロジェクトの設定

プロジェクトの設定のInfoで「Main storyboard file base name」を選択してマイナスボタンで削除します。 Main.storyboardファイルはプロジェクトから削除します(残しても問題ないですが)。
1.png

画面を構成するファイル

ファイルの追加

画面のために以下の二つのファイルを追加します。 分かり易くするため、この2つのファイル名は同じにします(ここではSubViewController.*)。

  • Story Boardファイル
  • サブクラスがUIViewControllerのCocoa Touch Classファイル

さらに、SubViewController.stroyboardを開き、View Controllerを追加しておきます。

Stroy BoardのView Controllerの設定

Custum Classの設定

追加したView ControllerのプロパティでCustom ClassのClassに上記追加したCocoa Touch Classのクラス(SubViewController)を指定します。
2.png

Initial View Controllerの設定

追加したView ControllerのプロパティでView Controllerのis Initial View Controllerチェックボックスにチェックを入れます。
3.png

初期画面の表示

AppDelegate.swiftファイルを以下の通り修正します。

  • navigationControllerプロパティを追加
  • application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Boolを修正

UIStoryboardイニシャライザのname:には初期画面にしたい画面を含むStory Boardの名称を指定します。

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {

        var window: UIWindow?
        var navigationController: UINavigationController?

        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            var storyboard: UIStoryboard = UIStoryboard(name: "SubViewController", bundle: NSBundle.mainBundle())
            var mainViewController: UIViewController = storyboard.instantiateInitialViewController() as! UIViewController

            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            self.navigationController = UINavigationController(rootViewController: mainViewController)

            self.window?.rootViewController = navigationController
            self.window?.makeKeyAndVisible()

            return true
        }
        ・・・
    }

画面遷移

次の画面へ

画面遷移を行う場合は、以下の様に

UIStoryboardイニシャライザのname:に次画面を含むStory Boardの名称を指定します。

    var storyboard: UIStoryboard = UIStoryboard(name: "NextViewController", bundle: NSBundle.mainBundle())
    var secondViewController: SecondViewController = storyboard.instantiateInitialViewController() as SecondViewController

    self.navigationController?.pushViewController(secondViewController, animated: true)

前の画面へ

self.navigationController?.popViewControllerAnimated(true)
23
23
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
23
23