質問

私は、次のコードを使用して2つのボタンでアラートビューを作成しています:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title 
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil];
[alertView show];

私は、いずれかのボタンがクリックされたときに、いくつかのコードを実行したいです。 そうするためには、私はdelegate.mファイルに次のメソッドが追加されています:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
 if (buttonIndex==0) //Run some code 
 else //Other code
 }

しかし、私はどちらかのボタンを押したときに、このメソッドは呼び出されません! なぜ誰かが私に言うことはできますか?

事前のおかげで、

Sagiftw

役に立ちましたか?

解決

delegate:nil
あなたは何の代表者は存在しません指定された場合は、

はどのように警告表示は、デリゲートを関連付けるのでしょうか?

とその部分を交換してください
delegate:self

の代わります。

他のヒント

の代わりにゼロの自己へのデリゲートを設定してみてください。

私は呼んでいたUIAlertViewのdismissWithClickedButtonIndexの:アニメーション:の私も、キーボードのリターンキーを処理したかったので、UITextFieldのデリゲートメソッドからメソッドます:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField.tag == 1001) {
        [textField resignFirstResponder];
        [_alert dismissWithClickedButtonIndex:1 animated:YES];
    }
    return YES;
}

この方法でメソッドの alertView:clickedButtonAtIndex:を使用すると、適切なデリゲートを設定していても呼ばれることは決してありません。代わりの alertView:didDismissWithButtonIndex:のは、呼び出しません。だからではなく、このメソッドを実装します:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // your code here
}

あなただけのアラートビューのボタンを処理する場合にのみ、それらの最初の呼び出しclickedButtonAtIndexとdidDismissWithButtonIndexます。

の.hにUIActionSheetDelegateと.MでalertViewを作成している間は、上記の場合に行われるものとして自己にないnilをデリゲートを入れて置く。

この質問に対する正しい答えはdelegate:nilです。しかし、デリゲートは、すでに自己に設定され、かつclickedButtonAtIndexはまだ働いていない場合には、あなたがalertviewを示した後、別のビューコントローラ([self.navigationController popViewControllerAnimated:YES];)をポップしているかどうかをチェックしてみてください。これも呼び出されていないclickedButtonAtIndexすることがあります。これは私に何が起こったのかです。

希望これが誰かを助けます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top