[iPhone]iPhoneのプロジェクトに新しいviewとcontrollerを追加する手順
先日リリースしたアプリはiPhone SDKのプロジェクト新規作成で選択できる「Utility Application」テンプレートをそのまま利用したのだが、 今作っているRPGでは少なくとも5画面ほど遷移させる必要がある。
Interface Bulderをいじりながら「Utility Application」ベースのプロジェクトに新しいviewとcontrollerを追加することができたので、その手順をメモしておく(手探りで確立した手順なので正しいかどうか自身なし)。
- 「Utility Application」で新規作成したプロジェクトからInterface Bulderを開いておく
- Interface Bulder => File => New にてCocoa TouchのViewを選択
- File => Save を選んでFooという名前で保存。このとき作成中のプロジェクトに追加するチェックを入れておく
- FooというWindowのFile's Ownerをダブルクリックし、Class欄に「FooViewController」と入力する
- 次にFile's Ownerの下にあるViewをクリックしてClass欄に「FooView」と入力する
- File's Ownerをクリックし、File => Write Class Files... を実行してFooViewController.hとFooViewController.mを書き出す
- 次にFile's Ownerの下にあるFoo Viewをクリックし、File => Write Class Files... を実行してFooView.hとFooView.mを書き出す
- FlipsideViewのソースの中身を書き出したファイルにコピーする
- cp FlipsideView.h FooView.h
- cp FlipsideView.m FooView.m
- cp FlipsideViewConroller.h FooViewConroller.h
- cp FlipsideViewConroller.m FooViewConroller.m
- 作成した.hと.c内の「Flipside」をすべて「Foo」に置換する
- File's Ownerをクリックして「Foo View Controller Connections」ウィンドウ (左から2番目のタブ)内のOutlets => viewとFoo Viewを接続する
ここまででビルドは通るはず。
次に作成したFooViewContorollerを呼び出してFooViewを表示するようにする。
MainViewController.hの次の部分を修正する。
#import "FlipsideViewController.h" @interface MainViewController : UIViewController <FlipsideViewControllerDelegate> { }
以下のように書き換える(動いたけど文法がわからないのでこれでいいのか自信なし)。
#import "FlipsideViewController.h" #import "FooViewController.h" @interface MainViewController : UIViewController <FlipsideViewControllerDelegate, FooViewControllerDelegate> { }
次にMainViewController.mを書き換えてしまう(もしくは新しいアクション用のメソッドを定義する)。 FilpsideをFooに書き換える。
- (IBAction)showIndo { FooViewController *controller = [[FooViewController alloc] initWithNibName:@"FooView" bundle:nil]; controller.delegate = self; controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:controller animated:YES]; [controller release]; }
ちなみにUIModalTransitionStyleFlipHorizontalの部分をUIModalTransitionStyleCoverVertical(下から出てくる) やUIModalTransitionStyleCrossDissolve(半透明で徐々に切り替わる)に変えると切り替わるときのアニメーション方法を変えることができる。
あとflipsideViewControllerDidFinishの引数の方をidとしておく(idにするよりもっといい方法があるかもしれない)。
- (void)flipsideViewControllerDidFinish:(id)controller { self dismissModalViewControllerAnimated:YES]; }
これでinfoアイコンをクリックするとFooViewが表示されるようになる。