2013年8月20日火曜日

複数のUIAlertViewクラスのボタンで異なる処理をさせたいとき

UIAlertViewクラスを複数使用していて、各UIAlertViewクラス毎に押されたボタンで異なる処理をさせたいときの対処方法。

具体的に言うと

例えば、AのUIAlertViewのOKボタン(ここは何ボタンでも良い)を押したらAの処理を、BのUIAlertViewのOKボタン(ここは何ボタンでも良い)を押したらBの処理をさせたい場合などです。

// 異なる処理をさせたいUIAlertViewをあらかじめ用意
@interface ViewController ()
{
    UIAlertView *_alertView1;
    UIAlertView *_alertView2;
}
@end

// _alertView1表示
-(void)something1
{
    _alertView1= [[UIAlertView alloc] initWithTitle:@"_alertView1"
                                           message:@"_alertView1です。"
                                          delegate:self
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:@"NO", nil];
    [_alertView1 show];
    [_alertView1 release];
}
// _alertView2表示
-(void)something2
{
    _alertView2= [[UIAlertView alloc] initWithTitle:@"_alertView2"
                                           message:@"_alertView2です。"
                                          delegate:self
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:@"NO", nil];
    [_alertView2 show];
    [_alertView2 release];
}
// その他のUIAlertView表示
-(void)something3
{
    UIAlertView *alrt = [[UIAlertView alloc] initWithTitle:@"alrt"
                                           message:@"alrtです。"
                                          delegate:self
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:@"NO", nil];
    [alrt show];
    [alrt release];
}

// UIAlertView デリゲートメソッド ----- (1)
// ボタンが押されたときに呼び出される
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    // _alertView1の場合の処理
    if (alertView == _alertView1){
        switch (buttonIndex) {
            case 0:
                NSLog(@"_alertView1 OKボタンが押されたとき");
                break;
            case 1:
                NSLog(@"_alertView1 キャンセルボタンが押されたとき");
                break;
           default:
                break;
        }
    }
    // _alertView2の場合の処理
    else if (alertView == _alertView2){
     switch (buttonIndex) {
            case 0:
             NSLog(@"_alertView2 OKボタンが押されたとき");
                break;
            case 1:
                NSLog(@"_alertView2 キャンセルボタンが押されたとき");
                break;
            default:
                break;
        }
    }
    // それら以外のUIAlertViewの場合の処理
    else{
        switch (buttonIndex) {
            case 0:
                NSLog(@"OKボタンが押されたとき");
                break;
            case 1:
                NSLog(@"キャンセルボタンが押されたとき");
                break;
            default:
                break;
        }
    }
    
}
ボタンが押されたかどうかは UIAlertViewクラスのalertView:clickedButtonAtIndex:メソッド を使います(1)。
そのメソッドの中でUIAlertViewクラスのインスタンス変数として用意した変数をif文で振り分けています。

おわり

これで動いたのですがもっと良い方法がありそうですね。

参考記事

一つのビューから複数のUIAlertViewを使った制御 - 静岡県富士市在住のiPhoneアプリ開発者ブログ

0 件のコメント:

コメントを投稿