[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]親子関係じゃないView間で値の受け渡しをする方法
@hawk_a 親子じゃないときは、Appdelegateに変数書いてそれを参照 …
-
開発したiOSアプリに不具合を見つけた時に緊急で審査期間を早くしてもらう方法
先日とうとう恐れていたことが起こりました。黒い怪物が部屋に出たとかそういうことで …
-
[XCode]ARC使用中にエラー「EXC_BAD_ACCESS」「respondsToSelector」が出た場合の対処法
なんでも、このエラーは解放済み(ゾンビ)のインスタンスにアクセスした時に出るエラ …
-
無料でプライベートリポジトリをゲットできるgitBREAKがかなり使える
gitといえばおおよそgithub。しかしgithubは無料でパブリックリポジト …
-
プログラミングができるだけではプロジェクトは成功しない
プログラマーなのに最近は電話対応で1日が終わる僕です。いろんな所でうめき声ととも …
-
[XCode]UINavigationBarにUIBarButtonItemでボタンを追加する方法
アプリ開発には欠かせないナビゲーションバー。 UINavigationBarにボ …
-
[XCode]追加してインポートしたヘッダーファイルが見つからないときの対処法3つ
XCodeでインポートの宣言をした際(import <hoge.h> …
-
[XCode]iPhoneに入っていないフォント(カスタムフォント)を使えるようにする方法と注意点
iPhoneは結構いろんなフォントが使えますが、「オリジナルのフォントを使いたい …
-
[XCode]NSNotificationってなに?って人もとりあえずこれだけは知っておくべき
異なるクラス間で通知や変数を渡したりできる便利なNSNotificationです …
-
[XCode]UISplitViewControllerからUIViewController SplitViewから1つのビューに遷移させる方法
昨日に引き続き。 [XCode4.4]UIViewController→UISp …