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

先日、アプリを初めて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に変更させる事ができます。

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

UIButtonからSplitViewControllerへ繋いでみました。
ログイン画面でパスワードを入力して、その値が正しかったら遷移をしたい場合はViewControllerからSplitViewControllerに繋いでやって、UIButtonのIBActionからSegueのIdentifierで条件分岐してやると上手くいきます。
というか、そういう用途に使いたいから初めにUIViewControllerを使うという場合がほとんどなんじゃないかと思います。
お次にCustomに設定したSegueの読み先を作ってやります。
File→New→File→Objective-C classでUIStoryboardSegueをサブクラスにしてクラスを作成します。以下参照。

そして上の神記事に書かれているソースコードを入力。
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行をコメントアウトしておきます。これをしないと落ちます。

これで起動してみるとうまいこと遷移すると思います。はじめのUIViewControllerの向きがおかしい場合はUIViewControllerをサブクラスにしたクラス作って指定してやれば直ります。
これで開発の幅が広がります。
UISplitViewControllerからUIViewControllerに戻る方法は以下。
[XCode]UISplitViewController→UIViewController SplitViewから1つのビューに遷移させる方法 | Exception Code.
関連記事
-
-
[XCode]iPhoneに入っていないフォント(カスタムフォント)を使えるようにする方法と注意点
iPhoneは結構いろんなフォントが使えますが、「オリジナルのフォントを使いたい …
-
-
[XCode]UINavigationBarにUIBarButtonItemでボタンを追加する方法
アプリ開発には欠かせないナビゲーションバー。 UINavigationBarにボ …
-
-
[git]Coda2でgitを設定してWordPressのテーマファイルをバックアップする方法
ブログのテーマを作り直していろいろしています。家ではiMac、外ではMacBoo …
-
-
信じられないほど簡単にオブジェクト指向って何?を解決してくれる本
「俺がやらなきゃ誰かやる」が合言葉の社会に生きている僕です。分からないことを分か …
-
-
[XCode 4.3]Text Fieldの入力が終わったら次のText Fieldにソフトウェアキーボードでカーソルを移動させて最後にボタンを押す方法
XCodeをしこしこやっております。ほーく(@hawk_a)です。 プログラムの …
-
-
[XCode]UISplitViewControllerからUIViewController SplitViewから1つのビューに遷移させる方法
昨日に引き続き。 [XCode4.4]UIViewController→UISp …
-
-
[XCode]StoryBoardで作ったTableViewCellでオリジナルのセルを表示する方法
TableView標準のセルではやりたいことが表現できなさそうな時には、Tabl …
-
-
[XCode]スキャナーで読み取れるバーコード(JANコード・Code39)をフォントで表示する方法と注意点
Passbookなどもそうですが、最近はクーポンや会員証などの電子化をよく目にし …
-
-
[XCode]親子関係じゃないView間で値の受け渡しをする方法
@hawk_a 親子じゃないときは、Appdelegateに変数書いてそれを参照 …
-
-
[XCode]追加してインポートしたヘッダーファイルが見つからないときの対処法3つ
XCodeでインポートの宣言をした際(import <hoge.h> …