UISegmentedControlを使ってUIViewControllerを切り替える方法

公開日: : iOSアプリ開発

先日紹介した「カスタムコンテナビューコントローラーを作る」の応用例として、UISegmentedControlを使って複数のUIViewControllerを切り替える方法を紹介します。

【iOS】カスタムコンテナビューコントローラーを作る – 拡張現実ライフ

スポンサード リンク

ストーリーボードで親と子のビューコントローラーを用意する

ストーリーボードを使って、こんな感じで親と子のビューコントローラーを配置します。

    

親となるビューコントローラーには、こんな感じでUISegmentedControlを追加しておきます。UINavigationControllerは、ナビゲーションバーを作るために使っています。

    

子となる1つ目のビューコントローラー。ここではUITableViewControllerを使っています。また、”Storyboard ID” には “TableViewController” という名前を付けておきます。

    

子となる2つ目のビューコントローラー。ここではUIViewControllerを使っています。また、”Storyboard ID” には “BlueViewController” という名前を付けておきます。

    

親のビューコントローラーにコードを追加する

@interface ViewController : UIViewController {
    UIViewController *currentViewController_;
    NSArray *viewControllers_;
}
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentedControl;

@end

親となるビューコントローラーの宣言はこんな感じ。子となる複数のビューコントローラーを格納しておく配列 viewControllers_ と、現在表示している子ビューコントローラーを示す currentViewController_ を用意しておきます。

    

- (void)setupViewControllers
{
    UIViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TableViewController"];
    UIViewController *secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"BlueViewController"];
    viewControllers_ = @[firstViewController, secondViewController];
}

子となるビューコントローラーのオブジェクトを配列に格納するメソッド setupViewControllers。instantiateViewControllerWithIdentifier:メソッドを使って子ビューコントローラーのオブジェクトを生成しています。

     

- (void)changeSegmentedControlValue
{
    if(currentViewController_){
        [currentViewController_ willMoveToParentViewController:nil];
        [currentViewController_.view removeFromSuperview];
        [currentViewController_ removeFromParentViewController];
    }
    
    UIViewController *nextViewController = viewControllers_[self.segmentedControl.selectedSegmentIndex];
    
    [self addChildViewController:nextViewController];
    nextViewController.view.frame = self.view.bounds;
    [self.view addSubview:nextViewController.view];
    [nextViewController didMoveToParentViewController:self];
    
    currentViewController_ = nextViewController;
}

UISegmentedControl の selectedSegmentIndex に応じて子ビューコントローラーを入れ替えるメソッド changeSegmentedControlValue を作ります。

    

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self setupViewControllers];

    [self changeSegmentedControlValue];
}

viewDidLoadメソッドでは、setupViewControllersメソッドを呼んで子ビューコントローラーの配列を作ってから、changeSegmentedControlValueメソッドを呼び出して子ビューコントローラーを表示します。

    

- (IBAction)changeSegmentValue:(id)sender {
    [self changeSegmentedControlValue];
}

UISegmentedControlのアクションでは、単にchangeSegmentedControlValueメソッドを呼び出して子ビューコントローラーを切り替えます。

    

@akio0911はこう思った。

UISegmentedControlを使ってUIViewControllerを切り替えるのって、結構よく使うパターンじゃないかなと思います。もっと良い方法があったらTwitterなどでぜひ教えてくださいね。

    

関連記事

skitched-20120521-122714.jpg

「15時間で覚える Twitterアプリ for iPhone開発講座」2日目 レポート

     こんにちは、アキオ(@akio0911)です。 先日、15時間でTwi

記事を読む

no image

iPhoneゲーム

爆発をもっと格好良くしたいですね。

記事を読む

20140416-192437.jpg

【iPhoneアプリ開発】UINavigationBarに複数のUIBarButtonItemを配置する方法

UINavigationBarの左側や右側に、複数のUIBarButtonItemを配置する

記事を読む

20140415-190441.jpg

【iPhoneアプリ開発】UIStepperの見た目をカスタマイズする方法

以前にUIStepperの使い方を解説する記事を書きましたが、 iOS5で搭載された新

記事を読む

skitched-20121011-184226.png

iOSのEventKitでiPhoneのカレンダー情報を読み取る方法

    こんにちは。アキオ(@akio0911)です。 先日はカレンダー・リマイ

記事を読む

skitched-20130517-135149

第14回 iPhoneアプリ開発もくもく会を開催しました。そして第15回の告知

     昨日(5月16日)、渋谷のコワーキングスペース「Lightningspot」

記事を読む

no image

iPhone adhoc ビルドの手順

iPhone のプログラムポータルで配信証明書を作成、ダウンロード 配信証明書をダブルクリ

記事を読む

20140530-000241.jpg

【Xcode 5】複数のストーリーボード間で画面遷移させる方法

今日は、ストーリーボードから他のストーリーボードへ画面遷移させる方法を紹介します。  

記事を読む

no image

オライリー「iPhone Hacks」書評

Iphone Hacks 作者: David Jurick,Adam Stolarz,D

記事を読む

skitched-20121010-112357.png

アドレス帳にアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法

     こんにちは。アキオ(@akio0911)です。 iOS 6からプライバ

記事を読む

20140714-144729.jpg
サンフランシスコのピア39にあるチャウダーズでクラムチャウダーを食す!

アップルの開発者向けイベント「WWDC2014」に参加するため

slooProImg_20140714064146.jpg
ミスドのカルピスドーナツとカルピスポンデリングを食べてみた!

ミスドで期間限定のカルピスコラボ商品「カルピスドーナツ」と「カルピ

slooProImg_20140713230358.jpg
十三カレー計画で牛すじカレーネギのせを食す!(大阪・十三)

「iPhoneアプリ開発キャンプ@大阪」のランチで、十三カレー計画

slooProImg_20140712085918.jpg
大阪・難波の加寿屋 法善寺でかすうどんを食す。ランチタイムはおにぎり2個まで無料!

大阪・難波の加寿屋 法善寺 (かすうどん KASUYA)で、かす

20140625-114250.jpg
ライブドアブログで運営していた「あきお商店」を「卵は世界である」に改名しました

少し前からライブドアブログで「あきお商店」というブログをやって

→もっと見る

PAGE TOP ↑