web-dev-qa-db-ja.com

複数のアラートビューがある場合に押された検出ボタン

1つのビューに複数のアラートビューがあり、このコードを使用して、押されたボタンを検出します。

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

    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];  

    if ([title isEqualToString:@"OK"]) {

          //for one alert view
          [passCode becomeFirstResponder];

     } else if ([title isEqualToString:@" OK "]) {

        //for another alert view, had to change "OK" to " OK "
        [passCodeConfirm becomeFirstResponder];

    }
}   

1つのビューに異なることを行う複数のアラートビューがあるため、ユーザーをだまして「OK」と「OK」は同じものだと思わせる必要があります。それは動作し、見た目は問題ありませんが、少し厄介な感じがします。確かに、これをアラートビューに固有にしてから、別のビューに固有にするなど、これを行う別の方法があります。私がこれをどのように行うか知っていますか?ありがとう!

27
Jack Humphries

個別のUIAlertViewにunique tagを設定し、それを識別してデリゲートメソッドでアクセスする方が技術的で優れています。

例えば、

    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Are You Sure you want to Update?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok",nil];
    [alert setTag:1];
    [alert show];
    [alert release];

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex  
    {
        if(alertView.tag == 1)
        {
            // set your logic
        }
    }
55
alloc_iNit

Tagプロパティを使用して、作成する各アラートビューを一意に識別します。

このような

myAlertView.tag = 1

次に、clickedButtonAtIndexデリゲートメソッドで、このタグプロパティを使用してどのalertviewのボタンがクリックされたかを確認します。

if(alertView.tag==1)
4
booleanBoy

ビューで、アラートビューごとにプロパティを追加します。

UIAlertView *myAlertType1;
UIAlertView *myAlertType2;

@property (nonatomic, retain) UIAlertView *myAlertType1;
@property (nonatomic, retain) UIAlertView *myAlertType2;

これらのプロパティを使用してアラートを作成します

self.myAlertType1 = [[[UIAlertView alloc] initWithTitle: ... etc] autorelease];
[self.myAlertType1 show];

次に、デリゲートメソッドで:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (alertView == myAlertType1) {
         // check the button types and add behaviour for this type of alert
    } else if (alertView == myAlertType2 {
         // check the button types and add behaviour for the second type of alert
    }
}

編集:上記は機能しますが、タグを使用するというiAppleの提案はよりクリーンでシンプルなようです。

2
gamozzii

ボタンを区別するためにタイトルは使用しません。アプリがローカライズされているか、ボタンのタイトルを変更することにしたときに問題が発生しますが、どこでも更新するのを忘れてください。代わりにボタンインデックスを使用するか、キャンセルボタンに加えてボタンが1つしかない場合は、cancelButtonIndexUIAlertViewプロパティを使用してください。

複数のアラートビューを区別するには、それらのtagプロパティを使用できます。

2
omz
 //in your .h file
  UIAlertView* alert1;
  UIAlertView* alert2;

  //in your .m file
  // when you are showing your alerts, use
  [alert1 show]; //or
  [alert2 show];

  //and just check your alertview in the below method

  - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex  
  {  
       if(alertView == alert1)
       {
              //check its buttons
       }
       else   //check other alert's btns
  }   
1
mayuur