Help us understand the problem. What is going on with this article?

UITabBarControllerでの遷移先のStoryboardを分割する方法

More than 3 years have passed since last update.

IOSのアプリ開発を行う際にStoryboardを使用する方も多いかと思います。
ただ、1つのStoryboardに全ての遷移を入れてしまうと、Storyboardが肥大化してしまいます。
大きすぎるStoryboardを読み込むと最悪XCodeが落ちてしまってどうにもならない、
という事も起きてしまうそうです。

そこで大事になるのがStoryboardを分割する事なのですが、
分割方法に関しては調べれば大量に出てくるのでここでは割愛します。

今回自分がぶつかったのはStoryboard分割してかつ、それをUITabBarController
で使用する事です。
その方法を自分への備忘録も含めまとめます。
UITabBarControllerでの分割方法も調べれば結構出てきますが

1.UITabBarControllerの配置

はじめにUITabBarControllerを配置します
ツールバーで検索すれば出てくるので適当に配置すれば大丈夫です。
初期状態だとこんな感じになるかと思います。

スクリーンショット 2016-04-19 17.23.04.png

Storyboardを分割しないのであればここに遷移をつないでいけばいいのですが、
今回は分割する事が目的なので、コードを書いていきます。

2.UITabBarControllerのコードを書く

UITabBarControllerにつけるコードを書いていきます。
今回自分が実装したのは、
タブを押した際のViewcontollerを差し替える形になります。
コードは以下の通りです。

SplitStoryBoardTabController.h
#import <UIKit/UIKit.h>

@interface SplitStoryBoardTabController : UITabBarController

@end

SplitStoryBoardTabController.m
#import <UIKit/UIKit.h>



#import "SplitStoryBoardTabController.h"



@implementation SplitStoryBoardTabController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray* viewControllers = [self.viewControllers mutableCopy];
    NSUInteger size = viewControllers.count;
    for( NSUInteger i=0; i<size; ++i )
    {
        UIViewController* viewController = viewControllers[i];

        @try {

            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:viewController.title bundle:nil];

            // ここで表示したい ViewController を指定する
            UIViewController* setViewController;
            setViewController = [storyboard instantiateInitialViewController];
            viewControllers[i] = setViewController;
        }
        @catch (NSException *exception) {
            NSLog(@"Err : %@", exception.name);
        }


    }
    self.viewControllers = viewControllers;

}

@end

UITabBarControllerはタブを押した際の遷移先をviewControllersという
プロパティに保持しています。
これを差し替えることによって遷移先を分割したStoryboardのViewControllerへの
遷移を実現します。

また、Storyboardのファイル名はタブコントローラについているViewControllerの
Titleから取得するようにしてみました。

このクラスを先ほど設置したUITabBarControllerに設定します。

3.Storyboardのタイトルを設定

最後にViewControllerのTitleを設定して読み込む
Storyboardを指定します。

スクリーンショット 2016-04-19 18.16.48.png

こんな感じで設定してあげると、タブの遷移先が指定のStoryboardのIs Initialが付いている
ViewContorllerになります。

以上となります。

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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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