STUDiO405

趣味のスノーボードやSK8、キャンプ、山登り、iOSアプリ開発関連のブログになる予定

メインで使っていない別のStoryboardのdelegateを設定する方法

しばらくコード書いてないとすぐ忘れる万年Objective-C初心者のsingo405です(;´Д`)
今年は基本勉強しようと思ってましたけど、まだ全然やってないです。
ブログも困って解決した事について書こうを思ってたんですけど(ry
一念発起して今回書いてみました(嘘
ちなみに酔っ払ってこの記事書いてますw


アプリのアップデート作業の中でついでの作業でしたが、設定画面を少し見やすくしようと思ってxibからStoryboardに変更する中で躓いた点について記録を残そうと思った記事がこちらになります。(長い

変更前は対象画面(xib)を生成して、delegateを設定(設定画面で内容に変更があったか判定する為)してからモーダルで表示してました。
(構成はUIView-UIScrollView-各ラベルなど)

settingViewController *controller = [[settingViewController alloc] init];
controller.delegate = self;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
UINavigationController *navCon = [[UINavigationController alloc]  initWithRootViewController:controller];
[self presentViewController:navCon animated:YES completion:nil];


変更後はxibだった画面をStatic Cellを使ったtableviewにしたかったのでStoryboardに替えてみました。
(構成はUINavigationControler-UITableViewController-各ラベルなど)
このアプリではStoryboard使ってなかったのでどうやって表示するのかググります。
こちらはすぐに分かりました。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"settings" bundle:nil];
UINavigationController *initialViewController = [storyboard instantiateViewControllerWithIdentifier:@"naviController"];


これで表示したいStoryboardを指定して、対象の起動時の初期画面のViewControllerも指定します。
(コードでの初期画面の指定は、以下の画像のようにIdentity InspectorのIdentity欄のStoryboard IDに入力した名称となります)
f:id:singo405:20150309200125p:plain

で、最終的に以下の書き方でdelegateをちゃんと設定できました。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"settings" bundle:nil];
UINavigationController *initialViewController = [storyboard instantiateViewControllerWithIdentifier:@"naviController"];
initialViewController.modalPresentationStyle = UIModalTransitionStyleCoverVertical;
settingViewController *rootViewController = [[initialViewController viewControllers] lastObject];
rootViewController.delegate = self;
[self presentViewController:initialViewController animated:YES completion:nil];


Stroyboard上のUINavigationController配下のlastObject = rootViewControllerがdelegateのprotocolメソッドを持っているので、想定通りにメソッドが呼ばれるようになりました。

settingViewController *rootViewController = [[initialViewController viewControllers] lastObject];

これですね。この部分です。
全然分からなくて時間がかかってしまいました。
(´-`).oO(これもしばらくしたら忘れるんだろな...


書いてあることで日本語が変な箇所あるかもしれませんがご了承ください。
酔って眠いのでそろそろ寝ますw