UIView

アクションシート

デリゲートの記述を行う。

@interface MyViewController : UIViewController<UIActionSheetDelegate>{

アクションシートの初期化と貼付けを行う。初期化の際にデリゲートの宣言をする。

// 初期化(+デリゲートの設定)
UIActionSheet *aSheet = [[UIActionSheet alloc]
initWithTitle:@"選択項目"
delegate:self
cancelButtonTitle:@"キャンセル"
destructiveButtonTitle:nil
otherButtonTitles:@"ボタン1", @"ボタン2", @"ボタン3",nil];
// アクションシートのスタイルを指定
[aSheet setActionSheetStyle:UIActionSheetStyleDefault];
// ビューに貼付ける
[aSheet showInView:[self view]];
// メモリの解放
[aSheet release];

デリゲートメソッド内で処理を記述する

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
}

## NavigationController
Xcodeのプロジェクト設定でNavigationControllerを選択した場合、RootViewController.xibとMainWindow.xibが作成される。MainWindowではUINavigationControllerが読み込まれており、このUINavigationControllerの中に上部のNavigation Barと下部のRootViewControllerがある。下部のRootViewControllerは、UITableViewControllerを継承して作成されており、テーブル状のメニュー画面を作成することが出来る。

この画面をタッチすると別のサブウインドウに移動できるようにするためには、


// NIBファイルを指定してビューコントローラを定義する
DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// メニューを押すと上記ビューコントローラを表示する
[self.navigationController pushViewController:dvc animated:YES];
[dvc release];

とする。

デリゲートとは

デリゲートとは、本来他のクラスのメソッドを用いて処理すべき内容を自分のクラス内で処理できるように、他のクラスのメソッドを自分のクラス内で呼び出して利用することを言う。例えば、ボタンを押せば録音を行うというプログラムで、録音が終了した際にひと手間処理を入れたい場合、本来であれば録音を行うクラスの録音終了メソッド内で処理が行われるが、デリゲートを宣言することでViewController上でこの録音終了処理を行うことが出来る。つまり、本来他のクラスがやるべき仕事を委譲されて自分自身で処理できるようになる。

まず、

@interface MyViewController : UIViewController <AVAudioRecorderDelegate>
{

と書くとこのViewControllerでAVAudioRecorderを代行すると宣言したことになる。次に処理を代行する部分をプログラムに明示する。例えば、

// 録音を行うクラス
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:soundURL settings:nil error:&error];
// 各処理を記述
// self=MyViewControllerにrecorderのデリゲートをセットする
[recorder setDelegate:self];

と書くと、recorderが行う処理の一部をMyViewControllerが代行することが出来る。代行する部分の処理は、

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag {
}

などの部分に記述する。各クラスはどのメソッドをデリゲートで使って良いか定義している。デリゲートしたクラスのうち使用出来るメソッドのみ処理を代行できる。