投稿

3月, 2012の投稿を表示しています

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終了
もしビューコントロー…

Xcode4でのアプリの多言語化

多言語化に関するメモ

多言語化の概要
iOSアプリのローカライズは、ファイル単位で行う。この項目をローカライズしたい時はこのファイル、あの項目をローカライズしたい時はあのファイル、というようにローカライズしたい項目に該当するファイルを多言語化させる。
ファイルをローカライズさせると、言語数の分だけ同じ内容のファイルが出来ます。後は各言語毎にファイルを編集します。
はじめにデフォルトを1つ作って(だいたいの場合は英語)それを複製し、それぞれの言語に対応させることがほとんどかと思います。
ローカライズされたファイルはそれぞれの言語フォルダの中に入れられます。

ソースが置いてあるところ/en.lproj/Localizable.strings
ソースが置いてあるところ/ja.lproj/Localizable.strings

注意点
ファイルのローカライズ状態には、どうも
1,ローカライズされてない
2,ローカライズされているが、en(英語)のみに対応している
3,ローカライズされていて、複数の言語に対応している
の3パターンあるようです。1と2の違いに気づきにくい。1から2への変更の場合、何か操作して何も反応がないように見える場合がよくあります。

具体的なやり方
ローカライズしたいファイルを選択し、ファイルインスペクタ(XCodeの右のほうにあるやつ)でLocalizationを行います。
ローカライズすることが多いであろうファイルは
storyboardIcon.pngInfoPlist.strings
アイコンの下に表示するアプリ名Localizable.strings
ソースコード内のNSStringインスタンス
など。
プロジェクトの設定のLocalizationsより言語を追加すると一気に複数のファイルを多言語化します。
すると、iPhone用、iPad用それぞれのstoryboard、それからInfoPlist.strings、Icon.pngなど多言語化されます。なにが多言語化されるかはそのときの構成によって違うようです。多言語化出来るものが見つかればそれを多言語化するような感じです。

Xcode4.2でプロジェクトの設定のLocalizationsで多言語化するものは
storyboard
icon
InfoPlist.strings(デフォルトで存在していてLocalizationsされているがen…