ひとりまとめ

もろもろのメモ

StoryBoardのsegueを使わずに画面遷移したい!

xcodeにあるStoryboardは、ぺたぺたKeynoteパワポのように貼付けるだけで画面が出来てしまうという驚き簡単なツールです。このおかげで、いよいよもって僕ですら「アプリでも作ってみるか」と思い至るほど。
画面遷移なんて、ボタンを貼って「control+ドラッグ」でできちゃう。


調子にのって画面を遷移しまくっていたら・・・お、重い・・・。
画面が増えまくると、愛機のMacBookAirが苦しがってる・・・。


彼にはひたすらがんばってもらうとしても、segue(画面遷移を表す線)が増えまくって、むしろ訳が分からない。
そこで、一部の遷移をプログラム的に処理し、主要な処理だけStoryboardのsegueを使って視覚的に理解しやすくしてみました。


■ 前提
Storyboardで、2つのViewControllerを貼付ける。
2つのViewControllerには、ボタンを貼付けておく。


■ 作戦A
modalで画面を重ねていく

手順1:遷移先を特定できるようにする
Storyboardで遷移”先”のViewControllerを選択して、

 Identityインスペクタ → Identity → Storyboard ID

に、任意の値を入れる。
この値を、次の手順2で利用する。


手順2:遷移元から呼び出す
遷移”元”画面にあるボタンのイベントに、次のように記述する。
以下は、画面を作っているStoryboardの名前がデフォルトの「MainStoryboard」で、手順1で指定したStoryboard IDが「nextView」だった場合の例。

//Storyboardを特定して
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
 
//そのStoryboardにある遷移先のViewConrollerを用意して
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"nextView"];
 
//呼び出し!
    [self presentViewController:vc animated:YES completion:nil];


ここで注意点。実は以前は
 presentModalViewController
だったようなのだけど、今は非推奨みたい。なので
 presentViewController
をつかってみた。


■作戦B
unwind segueというのを使って、戻る。

手順1:戻り先のViewControllerに、それ用のメソッドを追加
メソッド名は何でもOK。引数はこれが必要。
このメソッドは.mにだけあればよい。
以下は、returnという名前で用意したもの。

- (IBAction)return:(UIStoryboardSegue *)segue
{
    //もし戻ってきた時にやりたい処理があれば書く。なければナシのままで。
}


手順2:戻り元のViewControllerのボタンに、イベントを紐づける
Storyboardに戻って、戻り元の画面の下にでている緑色の「Exit」を選択する。そしてConnectionインスペクタを開くと、手順1で作ったメソッドが見えてる。こいつの右にある○からボタンまでドラッグする。


一手間発生してしまうけれど、これでsegueの線が減らせました−!
しかも、作戦AでStoryboardを指定しますので、「複数のStoryboard」で画面を用意した場合も、そっちに飛んでいけちゃう!!!なんという怪我の功名。


こちらを片手にObjective-Cを勉強継続中。なかなか活かせてない。