8

UIAlertViewDelegate メソッド- (void)alertViewCancel:(UIAlertView *)alertViewが、キャンセル ボタンで AlertView をキャンセルしたときに呼び出されないという問題があります。

奇妙なのは、デリゲート メソッド(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexが完全に機能することです。

誰にもアイデアはありますか?

前もって感謝し
ます

- (void)alertViewCancel:(UIAlertView *)alertView
{   
    if(![self aBooleanMethod])
    {
        exit(0);
    }
}

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

ボタンがクリックされたときにこれを呼び出します。

- (void)ImagePickDone
{
    UIAlertView *alertDone = [[UIAlertView alloc] 
                          initWithTitle:@"Done" 
                          message:@"Are u sure?"
                          delegate:self 
                          cancelButtonTitle:@"Cancel" 
                          otherButtonTitles: @"Yes", nil];
    [alertDone show];   
    [alertDone release];
}
4

3 に答える 3

12

alertViewCancel は、ユーザーが [キャンセル] ボタンを押したときではなく、システムがアラート ビューを閉じるときに使用されます。アップルドキュメントからの引用:

必要に応じて、alertViewCancel: メソッドを実装して、システムがアラート ビューをキャンセルしたときに適切なアクションを実行できます。デリゲートがこのメソッドを実装していない場合、デフォルトの動作は、ユーザーがキャンセル ボタンをクリックしてビューを閉じることをシミュレートすることです。

ユーザーが「キャンセル」ボタンを押したときにキャプチャする場合は、clickedButtonAtIndex メソッドを使用して、インデックスがキャンセル ボタンのインデックスに対応していることを確認する必要があります。このインデックスを取得するには、次を使用します。

index = alertDone.cancelButtonIndex;
于 2010-03-15T15:50:16.920 に答える
2

このデリゲートのインデックス 0 でキャンセルを処理できます。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0){
      //cancel button clicked. Do something here.
    }
    else{
      //other button indexes clicked
    }
}   
于 2010-03-16T15:18:22.193 に答える
0

これは、2 つの方法で改善できます。まず、ユーザーが実際にボタンをクリックした場合のみを処理します。[myAlert DismissWithClickedButtonIndex:] が呼び出された場合や、アラートが他の方法で破棄された場合は処理しません。次に、ボタン 0 は必ずしもキャンセル ボタンではありません。2 つのボタンがあるアラートでは、左のボタンはインデックス 0 にあり、右のボタンはインデックス 1 にあります。タイトルを変更して右のボタンが「キャンセル」と表示されるようにすると、ボタン 1 は論理的に [キャンセル] ボタンになります。「willDismiss」の代わりに、ダイアログが消えた後に呼び出される「didDismiss」を実装できます。

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == alertView.cancelButtonIndex)
    {
      //cancel button clicked. Do something here.
    }
    else
    {
      //other button indexes clicked
    }
}   
于 2013-10-17T18:49:29.850 に答える