UIAlertViewのお話(2) | 初心者がiPhoneアプリを作るブログ

初心者がiPhoneアプリを作るブログ

初心者がiPhoneアプリを作るブログです.
入門レベルですので開発初心者にも,できるだけ分かるように丁寧に説明していきます(多分).

では,delegateについて説明します.

このブログを始めから読んでくれている人は既にdelegateを使った事があります.
UITableViewControllerの設定の際に,プロパティに値を設定するのではく,
関数の返り値として設定しましたよね??
あれこそがデリゲートな訳です.

デリゲートについては別のエントリで詳しく説明するとして,とりあえずコードを書いていきましょう.
UIAlertViewの初期化を以下のように変えて下さい.
- (void)buttonTouched:(UIButton *)button{
    // UIAlertViewの初期化
    UIAlertView *alert = [[UIAlertView alloc
                          initWithTitle:@"Touched!!"
                          message:@"Button is Touched!!"
                          delegate:self
                          cancelButtonTitle:@"Cancel"
                          otherButtonTitles:@"OK", @"OK1", @"OK2", nil];
    // UIAlertViewを表示する
    [alert show];
}
引数の「delegate」の部分がselfになっただけです.
ここで,UIButtonを思い出して下さい.
ボタンが押された場合の処理をどの関数で実行するのかを設定する際はどうしていましたか??

関数の名前と,その関数を持っているインスタンスを指定しましたよね?

ここでは,delegateできるインスタンスを指定しているわけなんですね.

しかし,このままではどの関数名で実行するのか分かりません.
ここで,このCustomViewControllerに関数を実装するのですが,
デリゲートの場合は,関数名が既に決まっています.

この決まっている関数名をCustomViewControllerに教えなくてはいけません.

そこでCustomViewController.hに
#import <UIKit/UIKit.h>


@interface CustomViewController : UIViewController <UIAlertViewDelegate>

@end

上記のように,UIViewControllerの後ろに「<UIAlertViewDelegate>
と追記してください.

こうすることで,CustomViewControllerはUIAlertViewのデリゲート先となることができます.

しかし,まだ関数が実装されていませんね.
なので,今度はCustomViewController.mに
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex{

}


- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    
}

- (void)willPresentAlertView:(UIAlertView *)alertView{
    
}

- (void)didPresentAlertView:(UIAlertView *)alertView{
    
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    
}

- (void)alertViewCancel:(UIAlertView *)alertView{
    
}

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView{
    return YES;
}


上記の7つの関数を実装してください.本当は全部実装する必要はないのですが,
練習のために書いてみましょう.

さて,これらの関数を一つずつ説明します.といってもある程度関数名で分かりますね.
「willDismiss」,「didDismiss」はUIAlertViewのボタンを押して,Viewが閉じる「前」,「後」に
それぞれ呼ばれます.
「willPresent」,「didPresent」はUIAlertViewが表示される「前」,「後」にそれぞれ呼ばれます.
「clicked」はボタンが押された時,「cancel」はUIAlertVIewの表示がキャンセルされた時に呼ばれます.
最後の「alertViewShouled~」は返り値をYESにすることで,UIAlertViewのボタンを使えるようにする
というものです,つまりNOにすると,UIAlertVIewが表示されてもボタンが押せなくなります.

UITableViewContrllerの時もこんな感じでしたよね.
これがデリゲートです.
なんとなく分かって頂ければ幸いなのですが自信がありません!!笑

さておき,OKボタンを押された場合に何か処理をしたい場合は,このデリゲートメソッド内に記述すると良い
ということが分かりましたよね.
ボタンが複数個ある場合は,引数の「buttonIndex」で処理を分岐させてくださいね.

UIAlertViewについては以上です.

次の記事へ

HOMEに戻る