Exception Code.

iPhone、Macと読書が大好き。iPhone・Mac・書評を中心に好きな事を書いていました。今は『ほーくブログ』でブログを書いています。

[XCode]UIViewControllerからUISplitViewController 1つのビューからSplitViewに遷移させる方法

      2013/09/06

MasterDetail xcodeproj  MainStoryboard storyboard 1

先日、アプリを初めてAppleに申請しました。@hawk_aです。

iOS開発の七不思議の1つだった「1つのViewからSplitViewに遷移させる」方法がやっとわかりました。

カスタムSegueを使う

やり方の前に参考URLを紹介させてください。感謝してもし切れません。

チーズくんの備忘録 [iOS]UIViewControllerからUISplitViewControllerへ遷移するためののSegue

おそらくこの記事がなかったら、寿命を迎えていたと思います。

ほとんどこちらの記事がベースになるのですが、UISplitViewControllerからUIViewControllerに戻る方法もあわせて書きたいと思います。どちらもStoryBoardのカスタムSegueを用いて実装します。

 

まずはUIViewからSplitViewへ遷移させる方法から。

プロジェクトの新規作成から[Master-Detail Application]を選択します。

Utilitiesから初めに表示させるViewControllerを作成するために、StoryBoardに引っ張ってきて、そいつのAttributes InspectorのIs Initial View Controllerにチェックを付けます。

これで初期起動をSplitViewControllerからUIViewControllerに変更させる事ができます。

MasterDetail xcodeproj  MainStoryboard storyboard 2

 

んで、遷移させたいオブジェクトからSplitViewControllerにSegueを引っ張ってやります。SegueはCustomで繋いでやりましょう。この状態にしておきます。

MasterDetail xcodeproj  MainStoryboard storyboard 3 1

UIButtonからSplitViewControllerへ繋いでみました。

ログイン画面でパスワードを入力して、その値が正しかったら遷移をしたい場合はViewControllerからSplitViewControllerに繋いでやって、UIButtonのIBActionからSegueのIdentifierで条件分岐してやると上手くいきます。

というか、そういう用途に使いたいから初めにUIViewControllerを使うという場合がほとんどなんじゃないかと思います。

お次にCustomに設定したSegueの読み先を作ってやります。

File→New→File→Objective-C classでUIStoryboardSegueをサブクラスにしてクラスを作成します。以下参照。

Xcode

 

そして上の神記事に書かれているソースコードを入力。

SplitViewFlipSegue.m

#import "SplitViewFlipSegue.h"

@implementation SplitViewFlipSegue

- (void)perform {
    //sourceViewController:遷移前のコントローラ
    //destinationViewController:遷移後のコントローラ
    UIViewController *sourceViewController = (UIViewController *)self.sourceViewController;
    UIViewController *destinationViewController = (UIViewController *)self.destinationViewController;
    
    // UISplitViewControllerのDetailViewControllerクラスへDelegateを設定
    UISplitViewController *splitViewController = (UISplitViewController *)destinationViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;
    
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    // 一度貼rootに設定することで、回転方向の修正
    window.rootViewController = destinationViewController;
    window.rootViewController = sourceViewController;
    
    [UIView transitionWithView:sourceViewController.view.window
                      duration:0.5
                       options:UIViewAnimationOptionTransitionFlipFromLeft
                    animations:^{
                        window.rootViewController = destinationViewController;
                    }
                    completion:^(BOOL finished){
                        //アニメーション終了後の処理
                    }];
}

@end

そして、AppDelegate.mのdidFinishLaunching…メソッドの3行をコメントアウトしておきます。これをしないと落ちます。

MasterDetail xcodeproj  AppDelegate m 2

 

これで起動してみるとうまいこと遷移すると思います。はじめのUIViewControllerの向きがおかしい場合はUIViewControllerをサブクラスにしたクラス作って指定してやれば直ります。

これで開発の幅が広がります。

 UISplitViewControllerからUIViewControllerに戻る方法は以下。

[XCode]UISplitViewController→UIViewController SplitViewから1つのビューに遷移させる方法 | Exception Code.

 - 開発/プログラム

  関連記事

bloggerXcode-icon-375x375-75.png
[XCode]ARC使用中にエラー「EXC_BAD_ACCESS」「respondsToSelector」が出た場合の対処法

なんでも、このエラーは解放済み(ゾンビ)のインスタンスにアクセスした時に出るエラ …

無料でプライベートリポジトリをゲットできるgitBREAKがかなり使える

gitといえばおおよそgithub。しかしgithubは無料でパブリックリポジト …

bloggerXcode-icon-375x375-75.png
開発したiOSアプリに不具合を見つけた時に緊急で審査期間を早くしてもらう方法

先日とうとう恐れていたことが起こりました。黒い怪物が部屋に出たとかそういうことで …

bloggerXcode-icon-375x375-75.png
[XCode 4.3]Text Fieldの入力が終わったら次のText Fieldにソフトウェアキーボードでカーソルを移動させて最後にボタンを押す方法

XCodeをしこしこやっております。ほーく(@hawk_a)です。 プログラムの …

デスマーチを止める!システム開発の成功に「設計」と「テスト」は欠かせない

「デスマーチ」という、IT業界で名の知れた用語があります。 商品知識のない営業が …

[git]Coda2でgitを設定してWordPressのテーマファイルをバックアップする方法

ブログのテーマを作り直していろいろしています。家ではiMac、外ではMacBoo …

bloggerXcode-icon-375x375-75.png
[XCode]StoryBoardで作ったTableViewCellでオリジナルのセルを表示する方法

TableView標準のセルではやりたいことが表現できなさそうな時には、Tabl …

bloggerXcode-icon-375x375-75.png
[XCode]追加してインポートしたヘッダーファイルが見つからないときの対処法3つ

XCodeでインポートの宣言をした際(import <hoge.h> …

bloggerXcode-icon-375x375-75.png
[XCode]NSNotificationってなに?って人もとりあえずこれだけは知っておくべき

異なるクラス間で通知や変数を渡したりできる便利なNSNotificationです …

bloggerXcode-icon-375x375-75.png
[XCode]スキャナーで読み取れるバーコード(JANコード・Code39)をフォントで表示する方法と注意点

Passbookなどもそうですが、最近はクーポンや会員証などの電子化をよく目にし …