storyboard細かいことまとめ

自分が作成するアプリの中でわかった細かいこと

segueをソースコードから実行することが出来ます。そのためのsegueをあらかじめstoryboardで作成しておくのですが、viewからはSegueが引けない。ViewControllerからは引ける。ViewControllerから引くやり方はステータスバーからcontrol + ドラッグ。あるいはfile's owner立方体アイコンからドラッグ。

segueの強制実行は
[self performSegueWithIdentifier:@"segueの名前" sender:self];
で出来ます。

segue実行時に新しいViewControllerに値を渡したいときは、実行時に走るメソッドの
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ }
をオーバーライドします。その中で
SecondViewController *secondViewController=(SecondViewController *)[segue destinationViewController];
secondViewController.*** = ***;
のようにすればよい
ただしpushとmodalの違いがあるようである。
上に書いてあるのはmodalでの仕様。pushはまだよくわからない。

また、新しいViewControllerのviewにUIKit部品を置いてある(storyboardで作成してある)場合、UIKitがインスタンス化されるタイミングに気を付ける必要がある。
prepareForSegueの中では、新しいViewControllerにあるインスタンスは生成されているが、UIKit部品はnil状態なのでアクセスできない。
”おそらく”実行の順番は
1 performSegueWithIdentifier開始
2 新しいViewControllerのインスタンス化(initなど)
3 prepareForSegue開始
4 prepareForSegue終了
5 UIKitのインスタンス化、画面回転メソッドの呼び出し、viewDidLoadなど
6 performSegueWithIdentifier終了
もしビューコントローラーのインスタンス化がもっと前だったならば1と2は反対かもしれないがおそらくこの順番でしょう。
なのでそのようなUIKit部品にアクセスしたいときはperformSegueWithIdentifier行の下の行で行えば出来る。
新しいViewController生成時には画面回転に関するメソッド(shouldAutorotateToInterfaceOrientationなど)が一回呼ばれるが、これは5のタイミングで行われる。画面回転の判断に必要な処理はprepareForSegueの中に入れる必要がある。

コメント

このブログの人気の投稿

Swiftのコンパイルエラー寄せ集め

Swift2.2からSwift3.0への変換を行ってみて

AVAudioSession細かいことまとめ(late 2014)